我有这条路线:
Route::get('/MyModel/{id}', 'MyController@show');
方法show()
接受一个名为id
的参数,我想为/MyModel/1
设置一个别名,所以它可以从/MyCustomURL
访问。
我已经尝试过几种组合,比如:
Route::get('/MyCustomURL', ['uses' => 'MyController@show', 'id' => 1]);
但我不断错过方法show()
所需的参数错误。
在Laravel有没有一个干净的方法来实现这一目标?
在Laravel 5.4(或者更早)中,您可以在路线文件中使用defaults
函数。
这是一个例子:
Route::get('/alias', 'MyModel@show')->defaults('id', 1);
在这种情况下,您无需在控制器中添加其他方法。
在同一个控制器(在你的情况下是MyController
?)中你应该创建一个新方法:
public function showAliased()
{
return $this->show(1);
}
现在您可以像这样定义别名路线:
Route::get('/MyCustomURL', 'MyController@showAliased');
像这样定义您的路线:您可以使用“as”为您的路线指定您需要的任何名称。
Route::get('/MyModel/{id}' , [
'as'=>'Camilo.model.show',
'uses' => 'MyController@show' ,
]) ;
现在,如果你想访问这条路线,你可以根据它的名字为它生成网址,如下所示:
route('Camilo.model.show', ['id' =>1]) ;
Route::get('MyModel/{id}', 'MyController@show');
不
Route::get('/MyModel/{id}', 'MyController@show');
祝好运!