пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Маршрутизация. Параметры маршрутов

  1. Маршрутизация. Параметры маршрутов
    •  (англ. Routing) — процесс определения маршрута следования данных в сетях связи.

Маршруты могут задаваться административно (статические маршруты), либо вычисляться с помощью алгоритмов маршрутизации, базируясь на информации о топологии и состоянии сети, полученной с помощью протоколов маршрутизации (динамические маршруты).

Статическими маршрутами могут быть:

·       маршруты, не изменяющиеся во времени;

·       маршруты, изменяющиеся по расписанию;

Простейшая маршрутизация

Все маршруты (routes) определены в файле app/Http/routes.php, который автоматически загружается фреймворком. В Laravel простейшие маршруты принимают URI (путь) и функцию-замыкание, предоставляя очень простой и выразительный метод определения маршрутов:

+ 5.2

 

Route::get('foo', function () {

  return 'Hello World';

});

Файл маршрутов по умолчанию

Файл routes.php загружается провайдером RouteServiceProvider и автоматически включается в группу посредников web, что обеспечивает доступ к состоянию сессии и CSRF-защиту. Большинство маршрутов вашего приложения будут определены в этом файле.

Доступные методы маршрутизатора

Маршрутизатор позволяет регистрировать маршруты для любого 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 () {

  //

});

+ 5.1 5.0

 

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() фасада Route:

Route::match(['get', 'post'], '/', function () {

  return 'Hello World';

});

Или вы можете зарегистрировать маршрут, отвечающий на HTTP-запросы всех типов, с помощью метода any():

Route::any('foo', function () {

  return 'Hello World';

});

Генерирование адресов URL для маршрутов

Вы можете генерировать URL для маршрутов вашего приложения методом url():

$url = url('foo');

Параметры маршрутов

Обязательные параметры

Разумеется, иногда вам может понадобиться захватить сегменты URI в вашем маршруте. Например, если вам необходимо захватить ID пользователя из URL. Это можно сделать, определив параметры маршрута:

Route::get('user/{id}', function ($id) {

  return 'User '.$id;

});

Вы можете определить сколько угодно параметров:

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {

  //

});

Параметры маршрута всегда заключаются в фигурные скобки. Параметры будут переданы в замыкание вашего маршрута при выполнении маршрута.

Параметры маршрута не могут содержать символ -. Используйте вместо него подчёркивание _.

Необязательные параметры маршрута

Иногда необходимо указать параметр маршрута, но при этом сделать его наличие необязательным. Это можно сделать, поместив знак вопроса ? после названия параметра. Не забудьте задать значение по умолчанию для соответствующей переменной маршрута:

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() вашего RouteServiceProvider:

/**

 * Определение привязок вашей модели, шаблонов фильтрации и т.д.

 *

 * @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} числовой.

});

Группы маршрутов

Группы маршрутов позволяют использовать общие атрибуты маршрутов, такие как посредники и пространства имён, для большого числа маршрутов без необходимости определять эти атрибуты для каждого отдельного маршрута. Общие атрибуты указываются в виде массива первым аргументом метода Route::group().

 


22.06.2017; 21:26
хиты: 134
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь