Запрос из адресной строки попадает в так называемый обработчик маршрутов, или маршрутизатор, или роутер (routes). Маршрутизатор определяет, какой контроллер необходимо вызывать.
Маршруты определяются в файле app/routes.php
Простейший get-маршрут. |
Route::get('/', function () { return 'Hello World'; }); |
Для перехвата POST-данных можно воспользоваться методом Route::post
Простейший post-маршрут. |
Route::post('foo/bar', function () { return 'Hello World'; }); |
Метод Route::any перехватывает и POSTи GET данные.
Маршрут любого http-запроса. |
Route::any('foo', function () { return 'Hello World'; }); |
Для перехвата маршрутов только по протоколу HTTPS, вторым входящим параметром можно передать не функцию, а массив, первым элементом которого является тип протокола, а вторым – функция.
Маршрут любого https-запроса. |
Route::get('foo', array('https', function() { return 'Must be over HTTPS'; })); |
Для генерации URL к какому-нибудь маршруту можно воспользоваться методом URL::to(). Это может пригодится для генерации путей к ссылкам (значение атрибута href), картинкам (src), стилям (href), скриптам(src), обработчику форм (action) либо при переадресации.
Генерация URL к маршруту. |
$url = URL::to('foo'); |
Для этих же целей можно использовать хелпер url
Использование хелпера url. |
$url = url('foo'); |
Параметры маршрутов
Добавление к маршруту обязательного параметра id.
Добавление к маршруту обязательного параметра id. |
Route::get('user/{id}', function ($id) { return 'User '.$id; }); |
Добавление к маршруту необязательного параметра name.
Добавление к маршруту необязательного параметра name. |
Route::get('user/{name?}', function ($name = null) { return $name; }); |
Вместо $name = nullможно использовать любое значение по умолчанию.
Добавление к маршруту необязательного параметра name. |
Route::get('user/{name?}', function ($name =’Jhon’) { return $name; }); |
Использование регулярных выражений в маршрутах.
Маршруты с соответствием пути регулярному выражению. |
Route::get('user/{name}', function ($name) { })->where('name', '[A-Za-z]+');
Route::get('user/{id}', function ($id) { })->where('id', '[0-9]+'); |
Вместо последовательного вызова метода where, можно передать массив ограничений.
Использование массива в регулярных вырражениях. |
Route::get('user/{id}/{name}', function ($name) { })->where(['name'=>'[A-Za-z]+', ‘id’=>'[0-9]+']);
|
Если какие-то регулярные выражения нужно связать со всеми параметрами, то можно использовать метод pattern:
Использование шаблона регулярного выражения. |
public function boot(Router $router) { $router->pattern('id', '[0-9]+'); parent::boot($router); } |
Таким образом, будет осуществляться проверка всех параметров с именем id.
Именованные маршруты
Задать имя маршруту можно следующим способом:
Назначение имени текущего исполняемого маршрута. |
Route::get('user/profile', array('as' => 'profile', function () { // })); |
Также можно задать контроллер и его экшн, который будет выполняется по данному маршруту.
Назначение контроллера и экшна. |
Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile')); |
Теперь можно использовать имя маршрута при генерации URL либо при перенаправлении.
Генерация URL. |
$url = URL::route('profile'); $redirect = Redirect::route('profile'); |
Получить имя текущего выполняемого маршрута можно методом currentRouteName():
Получить имя текущего исполняемого маршрута. |
$name = Route::currentRouteName(); |
Практика