2016-07-06 197 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); 
} 
相關問題