如何在Laravel中实现数组类型路由?

时间:2019-05-17 08:40:46

标签: php laravel

我正在尝试在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,但找不到任何指向我要尝试​​做的事情。

5 个答案:

答案 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');