2016-06-15 35 views
3

的路由我有這樣的路線:別名有固定的參數值

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

show()接受一個名爲id參數的方法,我想設置爲/MyModel/1的別名所以它從/MyCustomURL入店。

我已經嘗試過了幾個組合,比如:

Route::get('/MyCustomURL', ['uses' => '[email protected]', 'id' => 1]); 

但我不斷收到缺少必需的參數錯誤方法show()

在Laravel有一個乾淨的方法來實現這一點嗎?

回答

1

在Laravel 5.4(或者更早的版本)中,您可以在路由文件中使用defaults函數。

這裏是例子:

Route::get('/alias', '[email protected]')->defaults('id', 1); 

在這種情況下,你不需要在控制器中添加額外的方法。

+0

從4.1版開始,Laravel似乎已經這樣做了。我會試試看,如果它能正常工作,我會切換到這個答案!謝謝。 – Camilo

1

在同一個控制器,你應該創建一個新的方法(在你的情況MyModel):

public function showAliased() 
{ 
    return $this->show(1); 
} 

,現在你也可以定義別名的路線,像這樣:

Route::get('/MyCustomURL', '[email protected]'); 
+0

我不喜歡這種方法,這是我必須爲每個別名設置一個方法。但它實際上回答了這個問題。謝謝。 – Camilo

2

這樣定義您的路線這個: 你可以使用「as」來爲你的路線指定你需要的任何名字。

route('Camilo.model.show', ['id' =>1]) ; 
+1

我不認爲這是我要找的。這很簡單,重定向到'/ MyModel/1'而不是別名。 – Camilo

-1
Route::get('MyModel/{id}', '[email protected]'); 

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

好運:

Route::get('/MyModel/{id}' , [ 
     'as'=>'Camilo.model.show', 
     'uses' => '[email protected]' , 
    ]) ; 

現在如果要訪問這條路線,你可以爲它的基礎上它的名字是這樣生成URL, !

+0

感謝您的提示,但是在路由開始時是否有反斜槓或區別? – Camilo

+0

如果那對你有幫助,請接受答案,對於你的問題; diffirent是thr的第一個路由是:localhost/yourproject/public/MyModel/5 第二個路由是:localhost/yourproject/public // MyModel/5 這就是爲什麼你的控制器無法重新使用你的id變量。 –

+0

它不回答問題,但無論如何感謝。 – Camilo