如何将第二个变量从routes.php传递给Laravel 5中的控制器?

时间:2016-07-06 04:30:34

标签: php laravel laravel-routing

我在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。

有什么想法吗?

3 个答案:

答案 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'])) {
        ...
    }
    ...
}

根据需要调整命名。

asklagbox blog - random tips and tricks for laravel