Laravel RouteServiceProvider
Документ подробно описывает функции расширения пакета, содержание большое, но не сложное.
Обычно, по умолчанию настройки могут удовлетворить большинство потребностей, поэтому после установки расширения пакета можно не настраивать, использовать сразу после распаковки, достаточно ознакомиться с правилами по умолчанию.
[TOC]
Расширение пакета ServiceProvider
наследует Laravel App\Providers\RouteServiceProvider
. Поэтому после установки расширения пакета всё ещё можно определить явную привязку модели маршрута, фильтры и пользовательскую логику анализа в методе boot()
App\Providers\RouteServiceProvider
.
Следует отметить, что изменения методов map()
, mapApiRoutes()
, mapWebRoutes()
неэффективны, поскольку расширение пакета перезаписывает метод map()
и метод map()
больше не ссылается на методы mapApiRoutes()
и mapWebRoutes()
.
Можно настроить группу промежуточного программного обеспечения, которая позволяет сопоставлять файлы маршрутов.
Расширение пакета будет использовать правила по умолчанию или пользовательские правила для назначения соответствующих файлов маршрутов этим группам промежуточного ПО и выполнения загрузки.
Для одной группы промежуточного ПО можно создать несколько файлов маршрутов, и эти файлы маршрутов можно разместить в любом месте каталога routes
.
Имя файла маршрута может использовать правила по умолчанию, или разработчик может настроить правила соответствия между файлом маршрута и группой промежуточного ПО.
Можно установить формат ответа на ошибку как глобальный формат вывода по умолчанию Json или установить его отдельно для каждой группы промежуточного ПО, которая разрешает сопоставление файлов маршрутов (настройки для отдельных групп имеют более высокий приоритет, чем глобальные настройки по умолчанию).
Проверяет, есть ли повторяющиеся URL (включая полные URL с ограничениями домена) во всех файлах маршрутов.
Может быть настроено, разрешать ли регистрацию маршрутов с замыканиями.
Может быть настроен, разрешать ли именам маршрутов иметь одинаковые имена.
Может быть настроен, разрешать ли повторное использование контроллеров.
Может быть настроен префикс пространства имён namespace
для каждой группы промежуточного ПО, разрешающей сопоставление файлов маршрутов.
Может быть настроен префикс поддомена domain
для каждой группы промежуточного ПО, разрешающего сопоставление файлов маршрутов.
Может быть настроен префикс маршрута prefix
для каждой группы промежуточного ПО, разрешающей сопоставление файлов маршрутов.
Может быть настроен префикс имени маршрута name
для каждой группы промежуточного ПО, разрешающей сопоставление файлов маршрутов.
Может быть настроен шаблон регулярного выражения ограничения параметров where
для каждой группы промежуточного ПО, разрешающей сопоставление файлов маршрутов.
PHP >= 7.0
Laravel >= 5.3
Laravel 6, Laravel 7, Laravel 8, Laravel 9 также могут быть установлены и использованы!
composer require ixianming/laravel-route-service-provider
В Laravel 5.5+ используется автоматическое обнаружение пакетов, поэтому нет необходимости вручную добавлять ServiceProvider
.
Нет необходимости комментировать маршрутизатор Laravel (за исключением случаев, когда пакет выдаёт подсказку).
Если версия Laravel меньше 5.5 или не используется автоматическое обнаружение:
Закомментируйте поставщика услуг Laravel в config/app.php
providers
массив App\Providers\RouteServiceProvider::class
.
Добавьте поставщика услуг расширения пакета Ixianming\Routing\RouteServiceProvider::class
в массив providers
в config/app.php
, под исходным поставщиком услуг App\Providers\RouteServiceProvider::class
.
'providers' => [
/*
* Laravel Framework Service Providers...
*/
/*
* Package Service Providers...
*/
/*
* Application Service Providers...
*/
// App\Providers\RouteServiceProvider::class,
Ixianming\Routing\RouteServiceProvider::class,
]
В классе App\Exceptions\Handler
добавьте код перед возвратом метода render
:
if (method_exists(\Ixianming\Routing\ExceptionResponse::class, 'wantsJson')) {
list($request, $exception) = \Ixianming\Routing\ExceptionResponse::wantsJson($request, $exception);
}
После модификации метод render
должен выглядеть следующим образом:
public function render($request, Exception $exception)
{
// Your code ...
// Ваш код должен предшествовать этой функции.
if (method_exists(\Ixianming\Routing\ExceptionResponse::class, 'wantsJson')) {
list($request, $exception) = \Ixianming\Routing\ExceptionResponse::wantsJson($request, $exception);
}
// Между функцией и оператором return не должно быть кода.
return parent::render($request, $exception);
}
После удаления расширения пакета не забудьте удалить добавленный код обработки формата вывода информации об ошибке из метода render
класса App\Exceptions\Handler
.
После удаления расширения пакета не забудьте удалить код, который использует свойства и методы этого расширения в пакете App\Providers\RouteServiceProvider
.
Если версия Laravel меньше 5.5 или автоматическое обнаружение не используется, после удаления расширения пакета не забудьте раскомментировать App\Providers\RouteServiceProvider::class
и закомментировать Ixianming\Routing\RouteServiceProvider::class
в массиве providers
файла config/app.php
.
Группы промежуточного ПО web
и api
по умолчанию могут сопоставлять файлы маршрутов.
Чтобы добавить новые группы промежуточного ПО, которым разрешено сопоставлять файлы маршрутов, добавьте атрибут $allowMatchRouteMiddlewareGroups
в файл app/Providers/RouteServiceProvider.php
:
protected $allowMatchRouteMiddlewareGroups = ['middlewareGroup_1', 'middlewareGroup_2'];
Значение атрибута $allowMatchRouteMiddlewareGroups
представляет собой одномерный массив, значения которого представляют собой имена групп промежуточного ПО, которым разрешено сопоставление файлов маршрутов.
Определённое значение атрибута $allowMatchRouteMiddlewareGroups
объединяется со значением по умолчанию, поэтому необходимо только определить новые группы промежуточного ПО, которым разрешено сопоставление файлов маршрутов.
При возникновении ошибки типа значения атрибута $allowMatchRouteMiddlewareGroups
будет использоваться значение по умолчанию.
Перед использованием этой функции необходимо вручную добавить функцию обработки формата вывода информации об ошибках в метод render
класса App\Exceptions\Handler
, иначе эта функция не будет работать.
Установите формат ответа по умолчанию для информации об исключении как Json, добавив атрибут $defaultExceptionJsonResponse
в файл app/Providers/RouteServiceProvider.php
и установив его значение в true
:
protected $defaultExceptionJsonResponse = true;
Атрибут $defaultExceptionJsonResponse
должен иметь значение логического типа (true
или false
).
По умолчанию атрибут $defaultExceptionJsonResponse
имеет значение false
. Свойства значения по умолчанию
Если значение свойства $defaultExceptionJsonResponse установлено в true, то при доступе к неизвестному маршруту или к маршруту с неустановленным форматом информации об исключениях, ответ на исключение будет иметь формат JSON.
Если свойство $defaultExceptionJsonResponse не существует, или его значение равно null или false, то формат ответа на исключение определяется заголовком запроса Accept.
При доступе к маршруту с настроенным форматом информации об исключении, формат ответа на исключение устанавливается в соответствии с настройками этого маршрута.
Настройка разрешения регистрации закрытых маршрутов
По умолчанию расширение разрешает регистрацию и использование закрытых маршрутов. Рекомендуется запретить регистрацию и использование таких маршрутов.
Причины запрета регистрации и использования закрытых маршрутов:
Чтобы запретить регистрацию закрытых маршрутов, добавьте свойство $closureRoute со значением false в файл app/Providers/RouteServiceProvider.php:
protected $closureRoute = false;
Значение свойства $closureRoute должно быть булевым (true или false). По умолчанию это свойство имеет значение true. Если значение свойства $closureRoute задано неправильно, будет использоваться значение по умолчанию. Значение true разрешает регистрацию закрытых маршрутов, а значение false запрещает их регистрацию.
Настройка уникальности имён именованных маршрутов
По умолчанию расширение запрещает дублирование имён именованных маршрутов.
Почему важно, чтобы имена именованных маршрутов были уникальными:
Для разрешения дублирования имён именованных маршрутов добавьте свойство $uniqueRouteName со значением false в файле app/Providers/RouteServiceProvider.php:
protected $uniqueRouteName = false;
Значение свойства $uniqueRouteName должно быть булевым (true или false). По умолчанию оно имеет значение true. Если значение свойства $uniqueRouteName задано неправильно, используется значение по умолчанию. Значение true требует уникальности имён, а значение false разрешает дублирование.
После запрета дублирования имён именованных маршрутов, если в маршрутах есть повторяющиеся имена, будет выдана ошибка. Расширение также укажет расположение повторяющихся маршрутов, их файлы и группы, что поможет быстро найти проблему.
Настройка повторного использования контроллеров
По умолчанию расширение позволяет повторно использовать контроллеры.
Зачем запрещать повторное использование контроллеров:
Чтобы запретить повторное использование контроллеров, добавьте свойство $allowReuseAction со значением false в файле app/Providers/RouteServiceProvider.php:
protected $allowReuseAction = false;
Значение свойства $allowReuseAction должно быть булевым (true или false). По умолчанию оно имеет значение true. Если значение свойства $allowReuseAction задано неправильно, используется значение по умолчанию. Значение true позволяет повторное использование контроллеров, а значение false запрещает его.
После запрета повторного использования контроллеров расширение проверит все маршруты на наличие повторяющихся контроллеров. При обнаружении повторений будет выдана ошибка, и расширение укажет местоположение повторяющихся контролеров, их файлы и группы.
Проверка повторяющихся URL
Эта функция является обязательной и не имеет переключателей.
В Laravel, если определены одинаковые URL, более поздний маршрут будет перекрывать предыдущий. Повторяющиеся URL нежелательны, так как они могут привести к хаосу, сложности в обслуживании и управлении.
После установки расширения оно проверит все маршруты на наличие дублирующихся URL и выдаст ошибку. Расширение также укажет местоположение дублирующихся URL, их файлы и группы для быстрого поиска проблемы.
URL включает полное доменное имя с ограничениями.
Правила по умолчанию
Правила по умолчанию определяют, как расширение обрабатывает маршрутизацию.
Например, файлы маршрутов в каталоге routes могут выглядеть следующим образом:
routes
|-- web.php
|-- api.php
|-- web_errorTest_api.php
|-- channels.php
|-- console.php
|-- welcome_web.PHP
|-- welcome_api.PHP
|-- web_User.php
|-- api_User.php
|-- Role
|-- role_WEB.php
|-- role_API.php
Файлы web.php, welcome_web.php, web_User.php и Role/role_WEB.php будут назначены группе web. Файлы api.php, welcome_api.php, api_User.php и Role/role_API.php будут назначены группе api. Загрузка файла web_errorTest_api.php приведёт к ошибке, поскольку он назначен двум группам одновременно.
Корневое пространство имён по умолчанию для групп:
Доменное имя по умолчанию для групп:
Префикс маршрута по умолчанию для групп:
Использование промежуточных групп и настройка их параметров
Промежуточные группы используются для настройки маршрутов в приложении. Промежуточная группа — это набор маршрутов, которые обрабатываются определённым образом. По умолчанию все маршруты обрабатываются одной промежуточной группой, но можно создать несколько промежуточных групп с разными настройками.
По умолчанию для всех промежуточных групп:
Для всех промежуточных групп по умолчанию используется формат ответа JSON при возникновении исключения. Однако перед использованием этой функции необходимо вручную добавить функцию обработки исключений в метод render класса App\Exceptions\Handler. В противном случае эта функция будет недоступна.
Если исключение возникает в промежуточной группе, то формат ответа определяется правилами этой группы. Если же правила не заданы, то используется глобальное правило.
Пользовательские правила могут переопределять стандартные, но если пользовательское правило задано неверно, то будет выброшено исключение, и формат ответа будет определяться стандартными правилами.
Чтобы задать пользовательские правила, нужно добавить метод customMiddlewareGroupsConfig в класс RouteServiceProvider. Этот метод должен возвращать массив, где каждый элемент массива представляет собой промежуточную группу. Элемент массива может иметь следующие ключи:
Ключ matchRule имеет особое значение. Он определяет правило, по которому маршрут будет соответствовать данной промежуточной группе. Значение этого ключа должно быть анонимной функцией, которая принимает один аргумент — путь к файлу маршрута относительно каталога routes. Функция должна возвращать true, если маршрут соответствует группе, и false в противном случае.
Обратите внимание, что путь к файлу чувствителен к регистру.
Также стоит отметить, что если промежуточная группа имеет заданное пространство имён, то при использовании методов action() или redirectToAction() для передачи параметров контроллеру, который принадлежит этой группе, необходимо передавать полное имя пространства имён контроллера, начинающееся с символа . Это относится как к случаям, когда пространство имён задано явно, так и к случаям, когда оно не задано, но используется по умолчанию.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )