Роутинг в Laravel: паттерны

Опубликовано 0 комментариев 382 просмотра
Роутинг в Laravel: паттерны

При создании маршрутов в Laravel есть довольно полезная фишка - вместо того, чтобы в каждом маршруте указывать паттерн для параметров через метод where(), возможно указать все возможные паттерны сразу. Особенно это полезно, когда одни и те же переменные с одними и теми же правилами используются в разных маршрутах. В этом нам поможет два метода:

Route::pattern(string $key, string $pattern);
Router::patterns(array $patterns);

Суть одна и та же, но первый метод предназначен для указания 1 конструкции за раз, а второго - указания списка конструкций в виде массива [$key1 => $pattern1, $key2 => $pattern2].

Таким образом, код вида

Route::get('users/{id}', '[email protected]')->where('id', '[\d+]+');
Route::get('products/{id}', '[email protected]')->where('id', '[\d+]+');
Route::get('articles/{slug}', '[email protected]')->where('slug', '[a-z0-9-]+');
Route::get('faq/{slug}', '[email protected]')->where('slug', '[a-z0-9-]+');

Можно смесло избавить от дублей, заменив на

Route::patterns([
     'id' => '\d+',
     'slug' => '[a-z0-9-]+'
]);

Route::get('users/{id}', '[email protected]');
Route::get('products/{id}', '[email protected]');
Route::get('articles/{slug}', '[email protected]');
Route::get('faq/{slug}', '[email protected]');

Напоследок, выложу большой список паттернов, которые могут пригодиться при разработке приложения на Laravel:

Route::pattern('id', '\d+');
Route::pattern('hash', '[a-z0-9]+');
Route::pattern('hex', '[a-f0-9]+');
Route::pattern('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}');
Route::pattern('base', '[a-zA-Z0-9]+');
Route::pattern('slug', '[a-z0-9-]+');
Route::pattern('username', '[a-z0-9_-]{3,16}');

На оригинальность не претендую, так как весь код взят отсюда.

В ответ на сообщение

Доступна разметка Markdown. А еще вы можете использовать крутой пак эмоций.

Нажимая на кнопку «Отправить» вы даете свое согласие на обработку персональных данных в соответствии с законом №152-ФЗ «О персональных данных» от 27.07.2006 и принимаете условия Политики конфеденциальности.