Как реализовать маршрут массива типа в Laravel? - PullRequest
17 голосов
/ 17 мая 2019

Я пытаюсь реализовать маршрут типа массива в Laravel 5.8.
Вот что я попробовал:

Route::get('/','/myroute', 'MyController@index');
Route::get(['/','/myroute'], 'MyController@index');
Route::get([('/','/myroute')], 'MyController@index');
Route::get('/' || '/myroute', 'MyController@index');  

По сути, я пытаюсь создать маршрут с условием "ИЛИ".
Допустим, я хочу получить доступ к MyController index, используя mydomain.dev/ или mydomain.dev/myroute, но я получаю 404 | Not Found .

Пытался прочитать документацию Laravel , но я не могу найти то, что указывает мне на то, что я пытаюсь сделать.

Ответы [ 5 ]

16 голосов
/ 17 мая 2019

Вот пример, который вы хотите реализовать.

Route::get('/{param?}', 'MyController@index')
    ->where('param', '(myroute|myroute2)');

По указанному выше маршруту вы можете создать следующие URL для той же функции контроллера

www.site.com/
www.site.com/myroute
www.site.com/myroute2

Попробуйте это, я думаю, это будетпомочь вам.

5 голосов
/ 17 мая 2019
Route::get('/{myroute?}', function () {
    echo 'test';
})
    ->where('myroute', '(myroute|mysecondroute)');

Это пример.Вы определяете в своем маршруте переменную, которая может принимать значения, которые вы имеете в вашем выражении where

Это означает, что конечные точки

api/myroute 
api/
api/mysecondroute

получат доступ к той же маршрутизации и разработают тот же контроллер

1 голос
/ 17 мая 2019

Вы не можете назначить массив как маршрут (он же первый аргумент в методе get), он должен быть строкой. Если вам нужно 2 маршрута для одного и того же контроллера, определите для этого 2 отдельных маршрута.

Route::get('/route', 'Controller@method');
Route::get('/another-route', 'Controller@method');
0 голосов
/ 17 мая 2019

Если вы определяете маршрут, который перенаправляет на другой URI, вы можете использовать метод Route::redirect:

Route::redirect('/here', '/there');
0 голосов
/ 17 мая 2019

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...