【问题标题】:Laravel 5.1 - Are Multiple URI's Possible?Laravel 5.1 - 是否可以使用多个 URI?
【发布时间】:2016-02-19 07:33:33
【问题描述】:
我想做的是类似这样的事情:
Route::get(['uri1','uri2'], function(){ /* these two uri's do the same thing */ });
Laravel 支持这个吗? Google 在这个问题上让我失望了。
【问题讨论】:
标签:
php
laravel
laravel-5
laravel-5.1
laravel-routing
【解决方案1】:
请记住,带有路由的.php 仍然是 PHP 脚本:
foreach ([
'the_first_uri',
'another_address',
]
as $route) {
/*
* Each route will call the same controller/action
*/
Route::get($route, 'YourController@anAction');
}
可以说,它不是很“可读”,但它有一些优点:
- DRY:不重复添加新路由的片段;想一想您只想重命名操作或控制器的情况
- VCS:使用枚举可能值的数组而不是正则表达式使您的提交和存储库历史更清晰,即如果您添加/更改/删除路由,您只需添加/修改/删除相应的行
不过,我相信大多数情况下foreach这样的说法会有些夸张;)
【解决方案2】:
您可以使用支持正则表达式的路由模式。这样做的好处是,他们使用的 URL 现在也可以作为参数提供给您:
Route::pattern('name', 'uri1|uri2');
Route::get('{name}', function($name) {
// do something with $name
});
如果您希望正则表达式模式仅适用于该路由而不适用于全局,您也可以这样写:
Route::get('{name}', function ($name) { })
->where(['name' => 'uri1|uri2']);
另一个例子;最好知道您的实际 URI 是什么,以便我提出真正的建议:
Route::pattern('name', 'uri[0-9]+');
Route::get('{name}', function() { });
请注意您的正则表达式模式不要太宽泛。
【解决方案3】:
您可以将它们指向控制器上的相同功能:
Route::get('uri1','YourController@yourFunction');
Route::get('uri2','YourController@yourFunction');