laravel route необязательный параметр

Понять маршрут Laravel с необязательным параметром

Я пытаюсь создать маршрут с одним необязательным параметром с помощью Laravel 5.4.

URL run/test/id/42 работает как ожидалось.

Но с run/id/42 Я получил хороший NotFoundHttpException in RouteCollection.php когда я ожидаю того же результата, чем run/default/id/42

Решение

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

В вашем случае id/ часть маршрута не является необязательной, поэтому «необязательный» параметр перед этим участком маршрута становится обязательным.

Маршрутизация Laravel фактически построена поверх маршрутизации Symfony, и это ограничение в Symfony. Согласно Документация Symfony здесь (выделение мое):

Конечно, вы можете иметь более одного необязательного заполнителя (например, /blog// ), но все после необязательного заполнителя должно быть необязательным. Например, //blog допустимый путь, но страница всегда будет требоваться (то есть просто /blog не будет соответствовать этому маршруту).

Кроме того, есть еще одна вещь, на которую стоит обратить внимание:

Маршруты с необязательными параметрами в конце не будут совпадать при запросах с косой чертой (т.е. /blog/ не будет совпадать, /blog будет соответствовать).

Другие решения

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

Источник

Laravel Framework Russian Community

Основы

Простейший GET-роут:

Простейшие роуты различных типов HTTP-запросов:

Регистрация роута для нескольких типов HTTP-запросов

Регистрация роута для любого типа HTTP-запроса:

Регистрация роута, всегда работающего через HTTPS:

Защита от CSRF

Вставка CSRF-токена в форму

То же самое, но с использованием шаблонизатора Blade:

Подмена HTTP-метода

Значение этого поля будет восприниматься фреймворком как тип HTTP-запроса. Например:

Параметры роутов

В роутах можно указывать параметры, которые можно получить в виде аргументов функции-замыкания:

Необязательные параметры роута:

Необязательные параметры со значением по умолчанию:

Роуты с соответствием пути регулярному выражению:

Конечно, при необходимости вы можете передать массив ограничений (constraints):

Определение глобальных паттернов

После того как паттерн определён, он применяется ко все роутам.

Доступ к значению параметров роута

Если вам нужно получить значение параметра вне роута, вы можете использовать метод input() :

Именованные роуты

Присваивая имена роутам вы можете сделать обращение к ним (при генерации URL в шаблонах (views) или редиректах) более удобным. Вы можете задать имя роуту таким образом:

Также можно указать контроллер и его метод:

Теперь вы можете использовать имя маршрута при генерации URL или переадресации:

Получить имя текущего выполняемого роута можно методом currentRouteName :

Группы роутов

Иногда вам может быть нужно применить фильтры к набору маршрутов. Вместо того, чтобы указывать их для каждого маршрута в отдельности вы можете сгруппировать маршруты:

Чтобы не писать полный неймспейс к каждому контроллеру, вы можете использовать параметр namespace в группе:

Поддоменные роуты

Роуты Laravel способны работать и с поддоменами:

Регистрация роута по поддомену:

Префикс пути

Группа роутов может быть зарегистрирована с одним префиксом без его явного указания с помощью ключа prefix в параметрах группы.

Добавление префикса к сгруппированным маршрутам:

Привязка моделей к роутам

Привязка параметра к модели

Затем зарегистрируйте роут, который принимает параметр :

Внимание: если переданный ID не соответствует строке в БД, будет брошено исключение (Exception) 404.

Если вы хотите задать свой собственный обработчик для события «не найдено», вы можете передать функцию-замыкание в метод model :

Ошибки 404

Этот хэлпер бросает исключение Symfony\Component\HttpFoundation\Exception\HttpException с кодом ответа 404.

Источник

Laravel Framework Russian Community

Пролог

Начало работы

Основы архитектуры

Основы

Фронтенд

Безопасность

Копаем глубже

База данных

Eloquent ORM

Тестирование

Официальные пакеты

Роутинг

Простейший роутинг

В Laravel простейшие роуты принимают URI (путь) и функцию-замыкание, предоставляя очень простой и выразительный метод определения роутов:

Файлы роутов по умолчанию

Доступные методы роутера

Роутер (маршрутизатор) позволяет регистрировать роуты для любого HTTP-запроса:

CSRF-защита

Параметры роутов

Обязательные параметры

Разумеется, иногда вам может понадобиться захватить сегменты URI в вашем роуте. Например, если вам необходимо захватить ID пользователя из URL. Это можно сделать, определив параметры роута:

Вы можете определить сколько угодно параметров:

Необязательные параметры

Ограничения регулярными выражениями

Вы можете ограничить формат параметров вашего роута с помощью метода where на экземпляре роута. Метод where принимает название параметра и регулярное выражение, определяющее ограничения для параметра:

Глобальные ограничения

Когда шаблон был определён, он автоматически применится ко всем роутам, использующим этот параметр:

Именованные роуты

Именованные роуты позволяют удобно генерировать URL-адреса и делать переадресацию на конкретный роут. Вы можете задать имя роута, прицепив метод name к определению роута:

Также можно указать имена роутов для действий контроллера:

Генерирование URL адресов для именованных роутов

Когда вы назначили имя роуту, вы можете использовать это имя для генерирования URL адресов и переадресаций глобальным методом route :

Группы роутов

Посредники

Посредники применяются ко всем роутам в группе путём указания списка этих посредников с параметром middleware в массиве групповых атрибутов. Посредники выполняются в порядке перечисления в этом массиве:

Пространства имён

Другой типичный пример использования групп роутов — назначение одного пространства имён PHP для группы контроллеров, используя параметр namespace в массиве группы:

Доменный роутинг

Группы роутов можно использовать для обработки маршрутизации поддоменов. Поддоменам можно назначать параметры роутов также как URI роутов, поэтому вы можете захватить часть поддомена и использовать в своём роуте или контроллере. Поддомен можно указать с помощью ключа domain в массиве атрибутов группы:

Префиксы роута

Метод prefix можно использовать для указания URI-префикса каждого роута в группе. Например, если вы хотите добавить admin ко всем URI роутов в группе:

Привязка модели роута

Неявная привязка

Laravel автоматически включает модели Eloquent, определённые в действиях роута или контроллера, чьи переменные имеют имена, совпадающие с сегментом роута. Например:

Изменение имени ключа

Если вы хотите, чтобы для получения класса данной модели вместо столбца id использовался другой столбец базы данных, вы можете переопределить метод getRouteKeyName в своей модели Eloquent:

Явная привязка

Для регистрации явной привязки используйте метод роута model для указания класса для данного параметра. Вам надо определить явные привязки вашей модели в методе boot класса RouteServiceProvider :

Затем определите роут, содержащий параметр :

Если совпадающий экземпляр модели не найден в базе данных, будет автоматически сгенерирован HTTP-отклик 404.

Изменение логики принятия решения

Подмена методов

Получение текущего роута

Чтобы изучить все доступные методы, обратитесь к документации по API класса, лежащего в основе фасада Route и экземпляра Route.

Источник

Маршрутизация

Простейшая маршрутизация

В Laravel простейшие маршруты принимают URI (путь) и функцию-замыкание, предоставляя очень простой и выразительный метод определения маршрутов:

Файлы маршрутов по умолчанию

Доступные методы маршрутизатора

Маршрутизатор позволяет регистрировать маршруты для любого HTTP-запроса:

Регистрация маршрута для нескольких типов запросов

Иногда необходимо зарегистрировать маршрут, который отвечает на HTTP-запросы нескольких типов. Это можно сделать методом PHP match () фасада Route :

Или вы можете зарегистрировать маршрут, отвечающий на HTTP-запросы всех типов, с помощью метода PHP any () :

Генерирование адресов URL для маршрутов

Вы можете генерировать URL для маршрутов вашего приложения методом PHP url () :

CSRF-защита

Параметры маршрутов

Обязательные параметры

Разумеется, иногда вам может понадобиться захватить сегменты URI в вашем маршруте. Например, если вам необходимо захватить ID пользователя из URL. Это можно сделать, определив параметры маршрута:

Вы можете определить сколько угодно параметров:

Необязательные параметры маршрута

Ограничения регулярными выражениями

Вы можете ограничить формат параметров вашего маршрута с помощью метода PHP where () на экземпляре маршрута. Метод PHP where () принимает название параметра и регулярное выражение, определяющее ограничения для параметра:

Глобальные ограничения

Когда шаблон определён, он автоматически применяется ко всем маршрутам, использующим этот параметр:

Доступ к значению параметра маршрута

Если вам нужен доступ к значению параметра маршрута извне, то вы можете использовать метод PHP input () :

Именованные маршруты

Именованные маршруты позволяют удобно генерировать URL-адреса и делать переадресацию на конкретный маршрут.

Вы можете задать имя маршрута, прицепив метод PHP name () к определению маршрута:

Вы можете задать имя маршрута с помощью ключа массива PHP as :

Также можно указать имена маршрутов для действий контроллера:

Также можно указать имена маршрутов для действий контроллера:

Или, вместо указания имени маршрута в определении массива маршрутов вы можете «прицепить» метод PHP name () к определению маршрута:

Группы маршрутов и именованные маршруты

Если вы используете группы маршрутов, то можете использовать ключ PHP as в массиве атрибутов группы маршрутов, так вы можете задать общий префикс для имён маршрутов в группе:

Метод PHP currentRouteName () возвращает имя маршрута, обрабатывающего текущий запрос:

Генерирование URL адресов для именованных маршрутов

Когда вы назначили имя маршруту, вы можете использовать это имя для генерирования URL адресов и переадресаций глобальным методом PHP route () :

Группы маршрутов

Посредники

Посредники применяются ко всем маршрутам в группе путём указания списка этих посредников с параметром middleware в массиве групповых атрибутов. Посредники выполняются в порядке перечисления в этом массиве:

Пространства имён

Другой типичный пример использования групп маршрутов — назначение одного пространства имён PHP для группы контроллеров, используя параметр namespace в массиве группы:

Доменная маршрутизация

Группы маршрутов можно использовать для обработки маршрутизации поддоменов. Поддоменам можно назначать параметры маршрутов также как URI маршрутов, поэтому вы можете захватить часть поддомена и использовать в своём маршруте или контроллере. Поддомен можно указать с помощью ключа domain в массиве атрибутов группы:

Префиксы маршрута

Атрибут группы prefix можно использовать для указания URI-префикса каждого маршрута в группе. Например, если вы хотите добавить admin ко всем URI маршрутов в группе:

Вы также можете использовать параметр prefix для передачи общих параметров в ваши сгруппированные маршруты:

Вы можете даже определить ограничения для именованного параметра в вашем префиксе:

CSRF-защита

Введение

В Laravel легко защитить ваше приложение от CSRF-атаки межсайтовой подделки запросов. Межсайтовая подделка запроса — тип вредоносных атак, при котором неавторизованные команды выполняются от имени авторизованного пользователя.

Laravel автоматически генерирует CSRF-«токен» для каждой активной сессии пользователя в приложении. Этот токен используется для проверки того, что запрос в приложение отправляет именно авторизованный пользователь.

Функция PHP csrf_field () генерирует такой HTML:

Исключение URI из CSRF-защиты

Иногда бывает необходимо исключить набор URI из CSRF-защиты. Например, при использовании Stripe для обработки платежей и их системы веб-хуков вам необходимо исключить ваш маршрут обработчика веб-хуков из CSRF-защиты Laravel.

X-CSRF-TOKEN

X-XSRF-TOKEN

Привязка модели

Неявная привязка

Laravel автоматически включает модели Eloquent, определённые в действиях маршрута или контроллера, чьи переменные имеют имена, совпадающие с сегментом маршрута. Например:

Изменение имени ключа

Если вы хотите, чтобы для получения класса данной модели вместо столбца id использовался другой столбец базы данных, вы можете переопределить метод PHP getRouteKeyName () в своей модели Eloquent:

Явная привязка

Для регистрации явной привязки используйте метод маршрута PHP model () для указания класса для данного параметра. Вам надо определить явные привязки вашей модели в методе PHP boot () класса RouteServiceProvider :

Источник

Маршрутизация

Простейшая маршрутизация

Регистрация маршрута для нескольких типов запросов

Регистрация маршрута для любого типа HTTP-запроса

Регистрация маршрута, всегда работающего через HTTPS

Вам часто может понадобиться сгенерировать URL к какому-либо маршруту — для этого используется метод PHP URL :: to () :

Параметры маршрутов

Необязательные параметры маршрута

Необязательные параметры со значением по умолчанию

Маршруты с соответствием пути регулярному выражению

Конечно, при необходимости вы можете передать массив ограничений (constraints):

Регистрация глобальных шаблонов

Если вы хотите, чтобы параметр был всегда ограничен заданным регулярным выражением, то можете использовать метод pattern :

Доступ к значению параметра маршрута

Если вам нужен доступ к значению параметра маршрута извне, то вы можете использовать метод PHP Route :: input () :

Фильтры маршрутов

Регистрация фильтра маршрутов

Если фильтр возвращает значение, оно используется как ответ на сам запрос и обработчик маршрута не будет вызван, и все after-фильтры тоже будут пропущены.

Привязка фильтра к маршруту

Привязка фильтра к действию контроллера

Привязка нескольких фильтров к маршруту

Привязка нескольких фильтров в виде массива

Передача параметров для фильтра

Фильтры по шаблону

Вы можете также указать, что фильтр применяется ко всем маршрутам, URI (путь) которых соответствует шаблону.

Вы также можете привязывать фильтры, зависящие от типа HTTP-запроса:

Классы фильтров

Для продвинутой фильтрации вы можете использовать классы вместо замыканий. Так как фильтры создаются с помощью IoC-контейнера, то вы можете положиться на его внедрение зависимостей для лучшего тестирования.

Регистрация фильтра-класса

По умолчанию будет вызван метод PHP filter () на класс PHP FooFilter :

Именованные маршруты

Присваивая имена маршрутам вы можете сделать обращение к ним (при генерации URL или переадресациях) более удобным. Вы можете задать имя маршруту таким образом:

Также можно указать контроллер и его действие:

Теперь вы можете использовать имя маршрута при генерации URL или переадресации:

Получить имя текущего выполняемого маршрута можно методом PHP currentRouteName () :

Группы маршрутов

Иногда вам может быть нужно применить фильтры к набору маршрутов. Вместо того, чтобы указывать их для каждого маршрута в отдельности вы можете сгруппировать маршруты:

Доменная маршрутизация

Маршруты Laravel способны работать и с поддоменами по их маске и передавать в ваш обработчик параметры из шаблона.

Регистрация маршрута по поддомену

Префикс пути

Группа маршрутов может быть зарегистрирована с одним префиксом без его явного указания с помощью ключа prefix в параметрах группы:

Привязка моделей

Привязка параметра к модели

Затем зарегистрируйте маршрут, который принимает параметр :

Внимание: если переданный ID не соответствует строке в БД будет возбуждено исключение 404.

Иногда вам может быть нужно использовать собственный метод для получения модели перед её передачей в маршрут. В этом случае просто используйте метод PHP Route :: bind () :

Ошибки 404

Есть два способа вызвать исключение 404 (Not Found) из маршрута. Первый — методом PHP App :: abort () :

Больше информации о том, как обрабатывать исключения 404 и отправлять собственный ответ на такой запрос содержится в разделе об ошибках.

Маршрутизация в контроллер

Laravel позволяет вам регистрировать маршруты не только в виде функции-замыкания, но и классов-контроллеров и даже создавать контроллеры ресурсов.

Больше информации содержится в разделе о контроллерах.

Комментарии (5)

laravel route необязательный параметр. Смотреть фото laravel route необязательный параметр. Смотреть картинку laravel route необязательный параметр. Картинка про laravel route необязательный параметр. Фото laravel route необязательный параметр

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

laravel route необязательный параметр. Смотреть фото laravel route необязательный параметр. Смотреть картинку laravel route необязательный параметр. Картинка про laravel route необязательный параметр. Фото laravel route необязательный параметр

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *