Как реализовать маршрут типа массива в Laravel?

Я пытаюсь реализовать маршрут типа массива в 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|Не найдено.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
18
0
1 665
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Маршрутизатор Laravel не обеспечивает функциональность, но поскольку это макрос, вы можете добавить простой макрос, чтобы решить ситуацию. Ниже я приведу пример.

В RouteServiceProvider или любом сервис-провайдере зарегистрируйте макрос:

Route::macro('gets', function(array $urls, $action) {
     foreach($urls as $url) {
          Route::get($url, $action);
     }
}

Теперь используйте его следующим образом в своем routes.php

Route::gets(['/', '/myroute'], 'MyController@index')

Да, но я хочу сделать это так, как я объяснил выше

fmsthird 17.05.2019 10:46
Route::get('/{myroute?}', function () {
    echo 'test';
})
    ->where('myroute', '(myroute|mysecondroute)');

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

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

api/myroute 
api/
api/mysecondroute

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

{myroute} должно быть необязательным, хотя я думаю.
brombeer 17.05.2019 10:51

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

Route::get('/route', 'Controller@method');
Route::get('/another-route', 'Controller@method');

да, это та же идея, что и @Mihkel

fmsthird 17.05.2019 10:49
Ответ принят как подходящий

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

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

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

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

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

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

Route::redirect('/here', '/there');

нет, мне нужно определить маршруты для одного контроллера, чтобы не перенаправлять

fmsthird 17.05.2019 10:53

Другие вопросы по теме