Изменения роутинга в Laravel 5.3



enter image description here
В нескольких последних версиях 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, либо выполнять с ними какие-то другие действия.

Оригинальная статья