我正在尝试在Laravel 5.8中实现数组类型的路由。
这是我尝试过的:
Route::get('/','/myroute', 'MyController@index');
Route::get(['/','/myroute'], 'MyController@index');
Route::get([('/','/myroute')], 'MyController@index');
Route::get('/' || '/myroute', 'MyController@index');
基本上,我要尝试创建的条件为“或”的路由。
假设我想使用 index
或 mydomain.dev/
访问MyController mydomain.dev/myroute
,但是却收到 404 | Not Found 。
试图阅读Laravel documentation,但找不到任何指向我要尝试做的事情。
答案 0 :(得分:15)
这是您要实现的示例。
Route::get('/{param?}', 'MyController@index')
->where('param', '(myroute|myroute2)');
通过上述路线,您可以为同一控制器功能创建以下网址
www.site.com/
www.site.com/myroute
www.site.com/myroute2
尝试一下,我认为这会对您有所帮助。
答案 1 :(得分:5)
Route::get('/{myroute?}', function () {
echo 'test';
})
->where('myroute', '(myroute|mysecondroute)');
这是一个例子。您在路线中定义了一个变量,该变量可以采用您所在位置的值
这意味着端点
api/myroute
api/
api/mysecondroute
将访问相同的路由并设计相同的控制器
答案 2 :(得分:1)
您不能将数组指定为路由(也就是get方法中的第一个参数),它应该是一个字符串。如果您需要2条路线才能到达同一控制器,请为此定义2条单独的路线。
Route::get('/route', 'Controller@method');
Route::get('/another-route', 'Controller@method');
答案 3 :(得分:0)
Laravel Router不提供此功能,但是由于它是Macroable,因此您可以添加一个简单的宏来解决这种情况。我将在下面提供一个示例。
实际上在RouteServiceProvider
或任何服务提供者中,注册一个宏:
Route::macro('gets', function(array $urls, $action) {
foreach($urls as $url) {
Route::get($url, $action);
}
}
现在在您的routes.php
中使用它
Route::gets(['/', '/myroute'], 'MyController@index')
答案 4 :(得分:0)
如果要定义重定向到另一个URI的路由,则可以使用Route::redirect
方法:
Route::redirect('/here', '/there');