
В нескольких последних версиях Laravel процесс маршрутизации претерпевал некоторые изменения. Происходило это, как правило, из-за того, что каждый раз мы чувствовали, что система всё еще не идеальна. В версии 5.3, мы, возможно, нашли золотую середину.
Оглянемся назад: изменения роутинга в Laravel 5.2
В Laravel 5.2 на некоторое время вroutes.php
маршруты были разделены на две группы, одна для “web” и вторая для “API”, но потом эту реализацию решили откатить.После этого разработка встала, хотя была идея создать несколько middleware групп, одна из которых для “web” роутов, а другая для “API”.
Группа “web” получила бы весь функционал, в котором нуждаются пользователи интернета: сеансы, куки, защита CSRF и т.д. Группа “API” была бы более легковесной и по умолчанию являлась “throttle” посредником, что было бы хорошим аргументом в реализации REST API.
Изменения в роутинге Laravel 5.3
В версии 5.3, файлapp/HTTP/routes.php
переехал в корневую директорию маршрутов routes/
, кроме того, теперь он разделён на два файла: web.php
и api.php
. Как вы наверное догадались, маршруты в routes/web.php
обернуты в middleware группу web
, а маршруты в routes/api.php
, соответственно, обернуты в группу API
.В этой реализации есть несколько преимуществ. Во-первых, теперь наши роуты явно разделены на web и API, что упрощает работу с маршрутизацией. Во-вторых, теперь множество файлов маршрутизации согласуются на уровне приложения, что, вероятно, даёт больше свободы разработчикам, позволяя более удобно организовывать структуру маршрутов. И в-третьих, директория роутов перемещена из
app/
, что не только позволяет новичкам легче находить директорию роутов, но и делает директорию app/
полностью реализованной согласно стандарту автозагрузки PSR-4.Если вы хотите настроить маршрутизацию или добавить свои собственные файлы роутов, ознакомьтесь с
App\Providers\RouteServiceProvider
:...
public function map()
{
$this->mapWebRoutes();
$this->mapApiRoutes();
//
}
protected function mapWebRoutes()
{
Route::group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require base_path('routes/web.php');
});
}
protected function mapApiRoutes()
{
Route::group([
'middleware' => ['api', 'auth:api'],
'namespace' => $this->namespace,
'prefix' => 'api',
], function ($router) {
require base_path('routes/api.php');
});
}
Как вы могли заметить, существует простой синтаксис для обертывания любых файлов-маршрутов в группу роутов, что бы затем применять к ним какие-либо префиксы или middleware, либо выполнять с ними какие-то другие действия.Оригинальная статья