我正在为我的一个项目使用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
调用此路线。我需要在路线上传递这些值。
我该怎么做?
答案 0 :(得分:7)
要使用问题的ID给您打电话:
<a href="{{ url('/problems/' . $problem->id . '/edit') }}" class="btn btn-xs btn-info pull-right">Edit</a>
我使用了锚标记,但它会像你按钮标记一样呈现,因为我保留了你定义的相同样式类。
原因很简单,url方法将获取控制器的完整URL。如果您不使用此功能,href链接将附加当前网址。
例如,supose you按钮位于给定页面内
yourdomain.com/a-given-page /
当有人点击你的按钮时,结果将是:
yourdomain.com/a-given-page/problems/ {问题-ID} /编辑
当你想要得到这个时:
yourdomain.com/problems/ {问题-ID} /编辑
您的路线中包含&#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>