具有固定参数值的路由的别名
Posted
技术标签:
【中文标题】具有固定参数值的路由的别名【英文标题】:Alias for a route with a fixed parameter value 【发布时间】:2016-10-15 23:12:02 【问题描述】:我有这条路线:
Route::get('/MyModel/id', 'MyController@show');
show()
方法接受一个名为id
的参数,我想为/MyModel/1
设置一个别名,以便可以从/MyCustomURL
访问它。
我已经尝试了一些组合,例如:
Route::get('/MyCustomURL', ['uses' => 'MyController@show', 'id' => 1]);
但我不断收到 missing required argument 方法 show()
的错误。
在 Laravel 中是否有一种简洁的方法来实现这一点?
【问题讨论】:
我最近发现了另一种设置路线的方法,无需烦人的“@”。Route::get('my-model/id', [MyController::class, 'show'])->name('show');
它为我的 IDE 提供了一个选项,可以从路由器文件中单击打开 MyController 类。
【参考方案1】:
在 Laravel 5.4(或更早版本)中,您可以在路由文件中使用 defaults
函数。
示例如下:
Route::get('/alias', 'MyController@show')->defaults('id', 1);
在这种情况下,您不需要在控制器中添加其他方法。
【讨论】:
这似乎从 Laravel 4.1 版本开始就存在了。我会尝试一下,如果它有效,我会切换到这个答案!谢谢。【参考方案2】:在同一个控制器中(在你的情况下是 MyController
?)你应该创建一个新方法:
public function showAliased()
return $this->show(1);
现在你可以像这样定义你的别名路由:
Route::get('/MyCustomURL', 'MyController@showAliased');
【讨论】:
我唯一不喜欢这种方法的是我必须为每个别名设置一个方法。但它实际上回答了这个问题。谢谢。【参考方案3】:像这样定义你的路线: 您可以使用“as”为您的路线指定您需要的任何名称。
Route::get('/MyModel/id' , [
'as'=>'Camilo.model.show',
'uses' => 'MyController@show' ,
]) ;
现在如果你想访问这个路由,你可以根据它的名字为它生成 url,如下所示:
route('Camilo.model.show', ['id' =>1]) ;
【讨论】:
我认为这不是我想要的。这是简单的重定向到/MyModel/1
而不是别名。【参考方案4】:
Route::get('MyModel/id', 'MyController@show');
不是
Route::get('/MyModel/id', 'MyController@show');
祝你好运!
【讨论】:
感谢您的提示,但是在路径的开头是否有反斜杠有什么区别? 如果对您有帮助,请接受您的问题的答案;不同的是,第一条路线是:localhost/yourproject/public/MyModel/5 第二条路线是:localhost/yourproject/public//MyModel/5 这就是为什么您的控制器无法处理您的 id 变量。以上是关于具有固定参数值的路由的别名的主要内容,如果未能解决你的问题,请参考以下文章