从按钮单击laravel调用路由

时间:2016-08-02 00:11:26

标签: php laravel laravel-5 routes balde

我正在为我的一个项目使用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->id调用此路线。我需要在路线上传递这些值。

我该怎么做?

3 个答案:

答案 0 :(得分:7)

在我的意见中,你应该使用url()Laravel方法

要使用问题的ID给您打电话:

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

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

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

原因很简单,url方法将获取控制器的完整URL。如果您不使用此功能,href链接将附加当前网址。

例如,supose you按钮位于给定页面内

  

yourdomain.com/a-given-page /

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

  

yourdomain.com/a-given-page/problems/ {问题-ID} /编辑

当你想要得到这个时:

  

yourdomain.com/problems/ {问题-ID} /编辑

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

您的路线中包含&#39; $ id&#39;,因此您需要接收这个&#39; $ id&#39;在你的方法

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'));
}

答案 1 :(得分:3)

试试这个:

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

小建议: 当你在laravel中定义路线时,给它一个唯一的名称,它可以帮助你跟踪每个网址,如下所示

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

现在你在刀片中使用这个路径只有post的名字并且得到两个

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

答案 2 :(得分: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>