{{TOC}} {{DOCVER 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11}} == Простейшая маршрутизация == В Laravel простейшие маршруты принимают URI (путь) и функцию-замыкание, предоставляя очень простой и выразительный метод определения маршрутов: %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) ~%% Route::get('foo', function () { return 'Hello World'; }); ~%% %% **Файлы маршрутов по умолчанию** %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) Все маршруты (//routes//) Laravel определены в файлах маршрутов, которые расположены в каталоге %%(t)routes%%. Эти файлы автоматически загружаются фреймворком. В файле %%(t)routes/web.php%% определены маршруты для вашего web-интерфейса. Эти маршруты входят в группу посредников %%(t)web%%, которые обеспечивают такие возможности, как состояние сессии и CSRF-защита. Маршруты из файла %%(t)routes/api.php%% не поддерживают состояния и входят в группу посредников %%(t)api%%. Для большинства приложений сначала определяются маршруты в файле %%(t)routes/web.php%%. %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) Файл %%(t)routes.php%% загружается провайдером %%(t)RouteServiceProvider%% и автоматически включается в группу посредников %%(t)web%%, что обеспечивает доступ к состоянию сессии и CSRF-защиту. Большинство маршрутов вашего приложения будут определены в этом файле. %% %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) **Доступные методы маршрутизатора** Маршрутизатор позволяет регистрировать маршруты для любого HTTP-запроса: ~%% Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback); ~%% Иногда необходимо зарегистрировать маршрут, который отвечает на HTTP-запросы нескольких типов. Это можно сделать методом %%match()%%. Или вы можете зарегистрировать маршрут, отвечающий на HTTP-запросы всех типов, с помощью метода %%any()%%: ~%% Route::match(['get', 'post'], '/', function () { // }); Route::any('foo', function () { // }); ~%% %% %%(DOCNEW 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) ~%% Route::get('/', function () { return 'Hello World'; }); Route::post('foo/bar', function () { return 'Hello World'; }); Route::put('foo/bar', function () { // }); Route::delete('foo/bar', function () { // }); ~%% **Регистрация маршрута для нескольких типов запросов** Иногда необходимо зарегистрировать маршрут, который отвечает на HTTP-запросы нескольких типов. Это можно сделать методом %%match()%% ((/docs/v5/facades фасада)) %%(t)Route%%: ~%% Route::match(['get', 'post'], '/', function () { return 'Hello World'; }); ~%% Или вы можете зарегистрировать маршрут, отвечающий на HTTP-запросы всех типов, с помощью метода %%any()%%: ~%% Route::any('foo', function () { return 'Hello World'; }); ~%% **Генерирование адресов URL для маршрутов** Вы можете генерировать URL для маршрутов вашего приложения методом %%url()%%: ~%% $url = url('foo'); ~%% %% %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) **CSRF-защита** Все HTML-формы, ведущие к маршрутам %%(t)POST%%, %%(t)PUT%% или %%(t)DELETE%%, которые определены в файле маршрутов %%(t)web%%, должны иметь поле CSRF-токена. Иначе запрос будет отклонён. Подробнее о CSRF-защите читайте в ((/docs/v5/csrf разделе о CSRF)): ~%%
{{ csrf_field() }} ...
~%% %% == Параметры маршрутов == === Обязательные параметры === Разумеется, иногда вам может понадобиться захватить сегменты URI в вашем маршруте. Например, если вам необходимо захватить ID пользователя из URL. Это можно сделать, определив параметры маршрута: %% Route::get('user/{id}', function ($id) { return 'User '.$id; }); %% Вы можете определить сколько угодно параметров: %% Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { // }); %% Параметры маршрута всегда заключаются в фигурные скобки и должны состоять из буквенных символов. Параметры маршрута не могут содержать символ **%%(t)-%%**. Используйте вместо него подчёркивание **%%(t)_%%**. === Необязательные параметры маршрута === Иногда необходимо указать параметр маршрута, но при этом сделать его наличие необязательным. Это можно сделать, поместив знак вопроса %%(t)?%% после названия параметра. Не забудьте задать значение по умолчанию для соответствующей переменной маршрута: %% Route::get('user/{name?}', function ($name = null) { return $name; }); Route::get('user/{name?}', function ($name = 'John') { return $name; }); %% === Ограничения регулярными выражениями === Вы можете ограничить формат параметров вашего маршрута с помощью метода %%where()%% на экземпляре маршрута. Метод %%where()%% принимает название параметра и регулярное выражение, определяющее ограничения для параметра: %% Route::get('user/{name}', function ($name) { // })->where('name', '[A-Za-z]+'); Route::get('user/{id}', function ($id) { // })->where('id', '[0-9]+'); Route::get('user/{id}/{name}', function ($id, $name) { // })->where(['id' => '[0-9]+', 'name' => '[a-z]+']); %% **Глобальные ограничения** Если вы хотите, чтобы параметр был всегда ограничен заданным регулярным выражением, то можете использовать метод %%pattern()%%. Вам следует определить эти шаблоны в методе %%boot()%% вашего %%(t)RouteServiceProvider%%: %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) ~%% /** * Определение привязок вашей модели, шаблонов фильтрации и т.д. * * @return void */ public function boot() { Route::pattern('id', '[0-9]+'); parent::boot(); } ~%% %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) ~%% /** * Определение привязок вашей модели, шаблонов фильтрации и т.д. * * @param \Illuminate\Routing\Router $router * @return void */ public function boot(Router $router) { $router->pattern('id', '[0-9]+'); parent::boot($router); } ~%% %% Когда шаблон определён, он автоматически применяется ко всем маршрутам, использующим этот параметр: %% Route::get('user/{id}', function ($id) { // Выполняется только если {id} числовой. }); %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) **Доступ к значению параметра маршрута** Если вам нужен доступ к значению параметра маршрута извне, то вы можете использовать метод %%input()%%: ~%% if ($route->input('id') == 1) { // } ~%% Также вы можете получить параметры текущего маршрута через экземпляр %%(t)Illuminate\Http\Request%%. Получить объект текущего запроса можно через фасад %%(t)Request%% или указав тип %%(t)Illuminate\Http\Request%%, в котором внедрены зависимости: ~%% use Illuminate\Http\Request; Route::get('user/{id}', function(Request $request, $id) { if ($request->route('id')) { // } }); ~%% %% == Именованные маршруты == Именованные маршруты позволяют удобно генерировать URL-адреса и делать переадресацию на конкретный маршрут. %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) Вы можете задать имя маршрута, прицепив метод %%name()%% к определению маршрута: ~%% Route::get('user/profile', function () { // })->name('profile'); ~%% %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) Вы можете задать имя маршрута с помощью ключа массива %%as%%: ~%% Route::get('user/profile', ['as' => 'profile', function () { // }]); ~%% %% Также можно указать имена маршрутов для //действий// контроллера: %% Route::get('user/profile', 'UserController@showProfile')->name('profile'); %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) Также можно указать имена маршрутов для //действий// контроллера: ~%% Route::get('user/profile', [ 'as' => 'profile', 'uses' => 'UserController@showProfile' ]); ~%% Или, вместо указания имени маршрута в определении массива маршрутов вы можете "прицепить" метод %%name()%% к определению маршрута: ~%% Route::get('user/profile', 'UserController@showProfile')->name('profile'); ~%% **Группы маршрутов и именованные маршруты** Если вы используете ((/docs/v5/routing#группы группы маршрутов)), то можете использовать ключ %%as%% в массиве атрибутов группы маршрутов, так вы можете задать общий префикс для имён маршрутов в группе: ~%% Route::group(['as' => 'admin::'], function () { Route::get('dashboard', ['as' => 'dashboard', function () { // Маршрут назван "admin::dashboard" }]); }); ~%% %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) Метод %%currentRouteName()%% возвращает имя маршрута, обрабатывающего текущий запрос: ~%% $name = Route::currentRouteName(); ~%% %% **Генерирование URL адресов для именованных маршрутов** Когда вы назначили имя маршруту, вы можете использовать это имя для генерирования URL адресов и переадресаций глобальным методом %%route()%%: %% // Генерирование URL... $url = route('profile'); // Генерирование переадресаций... return redirect()->route('profile'); %% Если у именованного маршрута есть параметры, вы можете передать их вторым аргументом метода %%route()%%. Эти параметры будут автоматически вставлены в соответствующие места URL: %% Route::get('user/{id}/profile', function ($id) { // })->name('profile'); $url = route('profile', ['id' => 1]); %% == ((#группы)) Группы маршрутов == Группы маршрутов позволяют использовать общие атрибуты маршрутов, такие как посредники и пространства имён, для большого числа маршрутов без необходимости определять эти атрибуты для каждого отдельного маршрута. Общие атрибуты указываются в виде массива первым аргументом метода %%Route::group()%%. === Посредники === Посредники применяются ко всем маршрутам в группе путём указания списка этих посредников с параметром %%(t)middleware%% в массиве групповых атрибутов. Посредники выполняются в порядке перечисления в этом массиве: %% Route::group(['middleware' => 'auth'], function () { Route::get('/', function () { // Использует посредника Auth }); Route::get('user/profile', function () { // Использует посредника Auth }); }); %% === Пространства имён === Другой типичный пример использования групп маршрутов - назначение одного пространства имён PHP для группы контроллеров, используя параметр %%(t)namespace%% в массиве группы: %% Route::group(['namespace' => 'Admin'], function() { // Контроллеры в пространстве имён "App\Http\Controllers\Admin" //для версии 5.2 и ранее: Route::group(['namespace' => 'User'], function() { // Контроллеры в пространстве имён "App\Http\Controllers\Admin\User" }); }); %% Помните, по умолчанию %%(t)RouteServiceProvider%% включает ваши файлы маршрутов в группу пространства имён, позволяя вам регистрировать маршруты контроллера без указания полного префикса пространства имён %%(t)App\Http\Controllers%%. Поэтому нам надо указать лишь ту часть пространства имён, которая следует за базовым пространством имён %%(t)App\Http\Controllers%%. === Доменная маршрутизация === Группы маршрутов можно использовать для обработки маршрутизации поддоменов. Поддоменам можно назначать параметры маршрутов также как URI маршрутов, поэтому вы можете захватить часть поддомена и использовать в своём маршруте или контроллере. Поддомен можно указать с помощью ключа %%(t)domain%% в массиве атрибутов группы: %% Route::group(['domain' => '{account}.myapp.com'], function () { Route::get('user/{id}', function ($account, $id) { // }); }); %% === Префиксы маршрута === Атрибут группы %%(t)prefix%% можно использовать для указания URI-префикса каждого маршрута в группе. Например, если вы хотите добавить %%(t)admin%% ко всем URI маршрутов в группе: %% Route::group(['prefix' => 'admin'], function () { Route::get('users', function () { // Соответствует URL "/admin/users" }); }); %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) Вы также можете использовать параметр %%(t)prefix%% для передачи общих параметров в ваши сгруппированные маршруты: ~%% Route::group(['prefix' => 'accounts/{account_id}'], function () { Route::get('detail', function ($accountId) { // Соответствует URL "accounts/{account_id}/detail" }); }); ~%% %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) Вы можете даже определить ограничения для именованного параметра в вашем префиксе: ~%% Route::group([ 'prefix' => 'accounts/{account_id}', 'where' => ['account_id' => '[0-9]+'], ], function() { // Здесь определение маршрутов }); ~%% %% == CSRF-защита == .(tl_note) Данный раздел актуален для версии 5.2 и ранее. В версии 5.3 он был перенесён в отдельную ((/docs/v5/csrf статью о CSRF)). === Введение === В Laravel легко защитить ваше приложение от CSRF-атаки ((https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0 межсайтовой подделки запросов)). Межсайтовая подделка запроса - тип вредоносных атак, при котором неавторизованные команды выполняются от имени авторизованного пользователя. Laravel автоматически генерирует CSRF-"токен" для каждой активной сессии пользователя в приложении. Этот токен используется для проверки того, что запрос в приложение отправляет именно авторизованный пользователь. Каждый раз определяя HTML-форму в своём приложении, вы должны включать в неё скрытое поле CSRF-токена, чтобы посредник CSRF-защиты смог проверить запрос. Чтобы сгенерировать скрытое поле ввода %%(t)_token%%, содержащее CSRF-токен, используйте вспомогательную функцию %%csrf_field()%%: %% // Vanilla PHP // Blade Template Syntax {{ csrf_field() }} %% Функция %%csrf_field()%% генерирует такой HTML: %%(html) %% Вам не нужно вручную проверять CSRF-токен в запросах типа POST, PUT или DELETE. ((/docs/v5/middleware посредник)) %%(t)VerifyCsrfToken%%, который входит в группу посредников %%(t)web%%, будет автоматически проверять совпадение токена входящего запроса с токеном, хранящимся в сессии. === Исключение URI из CSRF-защиты === Иногда бывает необходимо исключить набор URI из CSRF-защиты. Например, при использовании ((https://stripe.com/ Stripe)) для обработки платежей и их системы веб-хуков вам необходимо исключить ваш маршрут обработчика веб-хуков из CSRF-защиты Laravel. Вы можете исключить URI, определив их маршруты вне группы посредников %%(t)web%%, которая включена в файл по умолчанию %%(t)routes.php%%, или добавив эти URI в свойство %%$except%% посредника %%(t)VerifyCsrfToken%%: %% %% Когда вы создали тег %%(t)meta%%, вы можете добавлять токен в заголовки всех запросов с помощью библиотеки, такой как jQuery. Так обеспечивается простая и удобная CSRF-защита для ваших приложений на основе AJAX: %% $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); %% === X-XSRF-TOKEN === Laravel также хранит CSRF-ключ в cookie %%(t)XSRF-TOKEN%%. Вы можете использовать значение из cookie, чтобы задать заголовок запроса %%(t)X-XSRF-TOKEN%%. Некоторые фреймворки JavaScript, такие как Angular, делают это автоматически. Вряд ли вам придётся использовать это значение вручную. .(alert) Разница между %%(t)X-CSRF-TOKEN%% и %%(t)X-XSRF-TOKEN%% в том, что первый использует простое текстовое значение, а второй - шифрованное значение, т.к. cookie в Laravel всегда шифруются. Если для передачи значения ключа вы используете функцию %%csrf_token()%%, то вам вероятно нужно использовать заголовок %%(t)X-CSRF-TOKEN%%. == Привязка модели == При внедрении ID модели в действие маршрута или контроллера бывает часто необходимо получить модель, соответствующую этому ID. Привязка моделей - удобный способ автоматического внедрения экземпляров модели напрямую в ваши маршруты. Например, вместо внедрения ID пользователя вы можете внедрить весь экземпляр модели %%(t)User%%, который соответствует данному ID. %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) === Неявная привязка === Laravel автоматически включает модели Eloquent, определённые в действиях маршрута или контроллера, чьи переменные имеют имена, совпадающие с сегментом маршрута. Например: ~%% Route::get('api/users/{user}', function (App\User $user) { return $user->email; }); ~%% В этом примере Laravel автоматически внедрит экземпляр модели, который имеет ID, совпадающий с соответствующим значением из URI запроса, потому что переменная Eloquent %%$user%%, определённая в маршруте, совпадает с сегментом URI маршрута %%(t){user}%%. Если совпадающий экземпляр модели не найден в базе данных, будет автоматически сгенерирован HTTP-отклик 404. **Изменение имени ключа** Если вы хотите, чтобы для получения класса данной модели вместо столбца %%(t)id%% использовался другой столбец базы данных, вы можете переопределить метод %%getRouteKeyName()%% в своей модели Eloquent: ~%% /** * Получить ключ маршрута для модели. * * @return string */ public function getRouteKeyName() { return 'slug'; } ~%% %% === Явная привязка === Для регистрации явной привязки используйте метод маршрута %%model()%% для указания класса для данного параметра. Вам надо определить явные привязки вашей модели в методе %%boot()%% класса %%(t)RouteServiceProvider%%: %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) ~%% public function boot() { parent::boot(); Route::model('user', App\User::class); } ~%% %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) ~%% public function boot(Router $router) { parent::boot($router); $router->model('user', 'App\User'); } ~%% %% Затем определите маршрут, содержащий параметр %%{user}%%: %% Route::get('profile/{user}', function (App\User $user) { // }); %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) ~%% Route::get('profile/{user}', function(App\User $user) { // }); ~%% %% Из-за того, что мы ранее привязали все параметры %%{user}%% к модели %%(t)App\User%%, её экземпляр будет внедрён в маршрут. Таким образом, к примеру, запрос %%(t)profile/1%% внедрит объект %%(t)User%%, полученный из БД, который соответствует ID %%(t)1%%. Если совпадающий экземпляр модели не найден в базе данных, будет автоматически сгенерирован HTTP-отклик 404. **Изменение логики принятия решения** %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) Если захотите использовать собственную логику принятия решения, используйте метод %%Route::bind()%%. Переданное в метод %%bind()%% замыкание получит значение сегмента URI, и должно вернуть экземпляр класса, который вы хотите внедрить в маршрут: ~%% public function boot() { parent::boot(); Route::bind('user', function ($value) { return App\User::where('name', $value)->first(); }); } ~%% %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) ~%% $router->bind('user', function ($value) { return App\User::where('name', $value)->first(); }); ~%% %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01) **Изменение поведения при событии "не найдено"** Если вы хотите задать свой собственный обработчик для события "не найдено", вы можете передать функцию-замыкание в качестве третьего аргумента метода %%model()%%: ~%% $router->model('user', 'App\User', function() { throw new NotFoundHttpException; }); ~%% %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) ~%% Route::model('user', 'User', function() { throw new NotFoundHttpException; }); ~%% ~%% Route::bind('user', function($value) { return User::where('name', $value)->first(); }); ~%% %% == Подмена методов == HTML-формы не поддерживают действия %%(t)PUT%%, %%(t)PATCH%% и %%(t)DELETE%%. Поэтому при определении маршрутов %%(t)PUT%%, %%(t)PATCH%% и %%(t)DELETE%%, вызываемых из HTML-формы, вам надо добавить в неё скрытое поле %%(t)_method%%. Переданное в этом поле значение будет использовано как метод HTTP-запроса: %%(html)
%% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) Для создания скрытого поля %%(t)_method%% вы также можете использовать функцию %%method_field()%%: ~%% ~%% %% Используйте вспомогательный метод %%method_field()%%, чтобы сгенерировать скрытое поле для %%(t)_method%%: %% {{ method_field('PUT') }} %% == Получение текущего маршрута == %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) Используйте методы %%current()%%, %%currentRouteName()%% и %%currentRouteAction()%% фасада %%(t)Route%% для получения информации о маршруте, обрабатывающем входящий запрос: ~%% $route = Route::current(); $name = Route::currentRouteName(); $action = Route::currentRouteAction(); ~%% %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) Метод %%Route::current()%% вернёт маршрут, обрабатывающий текущий HTTP-запрос, позволяя вам проверить весь экземпляр %%(t)Illuminate\Routing\Route%%: ~%% $route = Route::current(); $name = $route->getName(); $actionName = $route->getActionName(); ~%% Также вы можете использовать вспомогательные методы %%currentRouteName()%% и %%currentRouteAction()%% фасада %%(t)Route%%, чтобы получить имя или действие текущего маршрута: ~%% $name = Route::currentRouteName(); $action = Route::currentRouteAction(); ~%% %% Чтобы изучить все доступные методы, обратитесь к документации по API ((http://laravel.com/api/5.2/Illuminate/Routing/Router.html класса, лежащего в основе фасада Route,)) и ((http://laravel.com/api/5.2/Illuminate/Routing/Route.html экземпляра Route)). %%(DOCNEW 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) == ((#404)) Ошибки 404 == Есть два способа вручную вызвать исключение 404 (//Not Found//) из маршрута. Первый - методом %%abort()%%, который просто вызывает %%(t)Symfony\Component\HttpFoundation\Exception\HttpException%% с указанным кодом состояния: ~%% abort(404); ~%% Второй - вручную вызвав экземпляр %%(t)Symfony\Component\HttpKernel\Exception\NotFoundHttpException%%. Больше информации о том, как обрабатывать исключения 404 и отправлять собственный ответ для таких ошибок, вы найдёте в разделе ((docs/v5/errors об ошибках)). %%