如何将第二个变量从routes.php传递给Laravel 5中的控制器?
问题描述:
我在routes.php
定义在Laravel 5以下路线:如何将第二个变量从routes.php传递给Laravel 5中的控制器?
Route::get('records/{id}', '[email protected]');
然而,我想有一个类似的路线是这样的:
Route::get('masterrecord/{id}', '[email protected][masterrecord=true]');
(该[masterrecord =真]位是发明,并不起作用)
当我打开'masterrecord',那么我想要在控制器中完全相同的功能(显示功能在RecordController),但我想传递一个额外的参数(类似'masterrecord = true'),这会使功能发生轻微的变化。我知道我可以参考不同的功能,但我真的不想重复相同的代码。
这是那种我倒是喜欢向有RecordController的事情,但我不知道如何使它发挥作用:
public function show($id, $masterrecord = false)
再来说records/id
路线我会masterrecord离开是假的,并且对于masterrecord/id
路线,我可以将第二个标记标记为true。
任何想法?
答
如果您确实想要在路由定义中传递硬编码值。然后你可以从路由的动作数组中取出它。给你另一种选择。
Route::get('masterrecord/{id}', [
'uses' => '[email protected]',
'masterrecord' => true,
]);
public function show(Request $request, $id)
{
$action = $request->route()->getAction();
if (isset($action['masterrecord'])) {
...
}
...
}
调整你想要的命名。
答
只是要值可选,并通过deafult
Route::get('masterrecord/{id}/{masterrecord?}', '[email protected]');
器设置:
public function show($id, $masterrecord = false) {
if($masterrecord) // only when passed in
}
答
你不需要重复任何代码,只需要调用一个主记录方法该方法show
:
Route::get('records/{id}', '[email protected]');
Route::get('masterrecord/{id}', '[email protected]');
public function show($id, $master = false) {
if ($master) {
...
}
...
}
public function showMasterRecord($id) {
return $this->show($id, true);
}