【问题标题】:Call route from button click laravel从按钮单击 laravel 调用路由
【发布时间】:2016-12-07 04:27:06
【问题描述】:

我在我的一个项目中使用 Laravel 框架和刀片模板引擎,其中我有一条看起来像

的路线
Route::get('/problems/{problem-id}/edit', 'AdminController@editProblem');

我在 AdminController 中有 editProblem 方法,它返回一个视图

public function editProblem(Problem $problem) {
        return view('admin.problem-edit', compact('problem'));
    }

我在视图上有一个按钮,看起来像

<button class="btn btn-xs btn-info pull-right">Edit</button>

现在我想在单击按钮时使用$problem-&gt;id 调用此路由。我需要在路由上传递这些值。

我该怎么做?

【问题讨论】:

    标签: php laravel laravel-5 routes balde


    【解决方案1】:

    在我看来,你应该使用 url() Laravel 方法

    要使用问题的 id 呼叫您的路线,您可以这样做:

    <a href="{{ url('/problems/' . $problem->id . '/edit') }}" class="btn btn-xs btn-info pull-right">Edit</a>
    

    我使用了一个锚标记,但它会像你的按钮标记一样呈现,因为我保留了你定义的相同样式类。

    为什么要使用 url() 方法?

    原因很简单,url 方法会获取到你的控制器的完整 url。如果您不使用它,href 链接将附加当前 url。

    例如,假设您的按钮位于给定页面内

    yourdomain.com/a-given-page/

    当有人点击你的按钮时,结果将是:

    yourdomain.com/a-given-page/problems/{problem-id}/edit

    当你想得到这个时:

    yourdomain.com/problems/{problem-id}/edit

    关于 editProblem 方法的一些注意事项

    你的路线有'$id',所以你需要在你的方法中接收这个'$id'

    public function editProblem($problem_id) {
    
    $problem = \App\Problem::find($problem_id); //If you have your model 'Problem' located in your App folder
    
    return view('admin.problem-edit', compact('problem'));
    }
    

    【讨论】:

    • 嗨@HL96,这个'{{'在其他'{{'中不起作用。所以我删除了内部大括号,并将其保留如下:href="{{ url('/problems/' . $problem-&gt;id . '/edit') }}"
    【解决方案2】:

    您需要创建一个指向此路线的链接:

    <a href="/problems/{{ $problem->id }}/edit" class="btn btn-xs btn-info pull-right">Edit</a>
    

    如果你使用命名路由,这会更容易:

    Route::get('/problems/{problem-id}/edit', ['as' => 'problems.edit', 'uses' => 'AdminController@editProblem']);
    

    然后你只需要调用route方法:

    <a href="{{ route('problems.edit', $problem->id) }}" class="btn btn-xs btn-info pull-right">Edit</a>
    

    【讨论】:

    • 如果我想使用&lt;button&gt; 而不是&lt;a&gt; 那我该怎么做呢?
    • 然后你需要添加一些javascript。喜欢:&lt;button data-href="..."&gt; 然后用 JS 捕捉点击并重定向。
    • @mostafiz13 在这种情况下,您应该在语义上使用锚点。虽然没有硬性规定,但使用按钮来导航用户几乎没有意义,因为这正是锚点的用途。
    【解决方案3】:

    试试这个:

    <button type="button" onclick="window.location='{{ url("users/index") }}'">Button</button>
    

    小建议: 当你在 laravel 中定义路由时,给它一个唯一的名字,它可以帮助你像这样跟踪每个 url

    Route::get('/problems/{problem-id}/edit', 'AdminController@editProblem')->name('pEdit');
    Route::post('/problems/{problem-id}/edit', 'AdminController@editProblem')->name('pEdit');
    

    现在你在刀片中使用这条路线,只为帖子命名并获取两者

    <button type="button" onclick="window.location='{{ route("pEdit",array("parameter1")) }}'">Button</button>
    

    【讨论】:

      【解决方案4】:

      被要求查询路线。 这样:

      <button  onclick="window.location='{{ route("some_route_name") }}'"...>
      </button>
      

      web.php

      Route::get('/some_route_url', [SomeRouteController::class,'some_func'])->name('some_route_name');
      

      【讨论】:

        猜你喜欢
        • 2016-12-12
        • 1970-01-01
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2018-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多