2016-07-06 196 views
0

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

任何想法?

回答

1

如果您确实想要在路由定义中传递硬编码值。然后你可以从路由的动作数组中取出它。给你另一种选择。

Route::get('masterrecord/{id}', [ 
    'uses' => '[email protected]', 
    'masterrecord' => true, 
]); 

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

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

调整你想要的命名。

asklagbox blog - random tips and tricks for laravel

1

只是要值可选,并通过deafult

Route::get('masterrecord/{id}/{masterrecord?}', '[email protected]'); 

器设置:

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

你不需要重复任何代码,只需要调用一个主记录方法该方法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); 
} 
相关问题