繁体   English   中英

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

[英]How to pass a second variable from routes.php to a controller in Laravel 5?

我在定义了以下路线routes.php中Laravel 5:

Route::get('records/{id}', 'RecordController@show');

但是,我想要一条类似的路线,例如:

Route::get('masterrecord/{id}', 'RecordController@show[masterrecord=true]');

([masterrecord = true]位是发明的,不起作用)

当我打开“ masterrecord”时,我想在控制器中使用完全相同的功能(RecordController中的show函数),但是我想传递一个额外的参数(例如“ masterrecord = true”),功能上的变化。 我知道我可以引用一个不同的函数,但是我真的不想重复相同的代码。

这是什么样的事情,我在RecordController,但我不知道如何使它发挥作用:

public function show($id, $masterrecord = false)

然后对于records/id路由,我将masterrecord保留为false,对于masterrecord/id路由,我将第二个标志标记为true。

有任何想法吗?

只需将值设为可选,然后默认即可设置

Route::get('masterrecord/{id}/{masterrecord?}', 'RecordController@show');

控制器:

public function show($id, $masterrecord = false) {
    if($masterrecord) // only when passed in
}

您无需重复任何代码,只需拥有一个调用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);
}

如果确实需要,可以在路由定义中传递一个硬编码的值。 然后,您可以将其从路线的动作数组中拉出。 给您另一个选择。

Route::get('masterrecord/{id}', [
    'uses' => 'RecordController@show',
    'masterrecord' => true,
]);

public function show(Request $request, $id)
{
    $action = $request->route()->getAction();

    if (isset($action['masterrecord'])) {
        ...
    }
    ...
}

调整命名方式。

asklagbox博客-laravel的随机提示和技巧

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM