我在Laravel 5中的routes.php
中定义了以下路线:
Route::get('records/{id}', 'RecordController@show');
但是,我希望有类似的路线:
Route::get('masterrecord/{id}', 'RecordController@show[masterrecord=true]');
([masterrecord = true]位被发明并且不起作用)
当我打开一个' masterrecord'然后我想在控制器中完全相同的功能(RecordController中的显示功能),但我想传递一个额外的参数(例如' masterrecord = true& #39;)这将使功能略有变化。我知道我可以参考不同的功能,但我真的不想重复相同的代码。
我在RecordController中有喜欢之类的东西,但我不知道如何让它工作:
public function show($id, $masterrecord = false)
然后对于records/id
路由,我会将masterrecord保留为false,而对于masterrecord/id
路由,我可以将第二个标记标记为true。
有什么想法吗?
答案 0 :(得分:1)
只需将值设为可选,然后通过deafult设置
Route::get('masterrecord/{id}/{masterrecord?}', 'RecordController@show');
控制器:
public function show($id, $masterrecord = false) {
if($masterrecord) // only when passed in
}
答案 1 :(得分:1)
您不需要重复任何代码,只需要一个调用show
方法的主记录方法:
Route::get('records/{id}', 'RecordController@show');
Route::get('masterrecord/{id}', 'RecordController@showMasterRecord');
public function show($id, $master = false) {
if ($master) {
...
}
...
}
public function showMasterRecord($id) {
return $this->show($id, true);
}
答案 2 :(得分:1)
如果您真的想要,可以在路径定义中传递硬编码值。然后你可以从路线的动作阵列中拉出它。给你另一个选择。
Route::get('masterrecord/{id}', [
'uses' => 'RecordController@show',
'masterrecord' => true,
]);
public function show(Request $request, $id)
{
$action = $request->route()->getAction();
if (isset($action['masterrecord'])) {
...
}
...
}
根据需要调整命名。