О web-разработке
и даже немного больше...

Ограничение параметров в маршрутах Laravel

Laravel довольно мощный фреймворк, который имеет множество встроенных методов для проектирования веб-приложения. Одним из фундаментальных инструментов является функционал построения маршрутов приложения.

Маршруты, они же «роуты» очень удобно использовать при написании логики приложения, а также при необходимости вывода URL путей в представлении (шаблонах) приложения. Важной частью построения маршрутов в Laravel является возможность передачи параметров в URL. Содержать маршруты могут как обязательные параметры так и необязательные. К значениям обязательных параметров довольно часто требуется наложить ограничения. Чтобы пользователь мог передавать только параметры заданного формата.

Для этих целей в классе для построения маршрутов существует метод where. Этот метод может принимать регулярные выражения для проверки передаваемых параметров. Делается это конечно же для корректной работы веб-приложения, ну и безопасности в том числе.

Рассмотрим простой пример:

Route::get('/post/{id}', function ($id) {
    return 'ID поста: ' . $id;
})->where('id', '[0-9]+');

Так мы задали ограничение для параметра id. По условию он может содержать только символы от 0 до 9. Аналогичным образом, мы можем задавать ограничения на несколько параметров.

Route::get('/post/{section_code}/{id}', function ($section_code, $id) {
    return 'Раздел: ' . $section_code . ', ID поста: ' . $id;
})->where('section_code', '[a-z0-9_-]+')->where('id', '[0-9]+');

Как вы понимаете регулярные выражения могут меняться вами как вам требуется. Для простых и распространённых случаев, например числовых или символьных значений существуют готовые методы, которые избавляют от потребности писать регулярные выражения для каждого маршрута.

Ограничение параметра только по цифрам

Для ограничения значения параметра только по числовым значениям может быть использован метод whereNumber.

Route::get('/post/{id}', function ($id) {
    //
})->whereNumber('id');

Ограничение параметра только по символам

Чтобы ограничить параметр только по буквам алфавита, можно воспользоваться методом whereAlpha.

Route::get('/post/{section_code}', function ($section_code) {
    //
})->whereAlpha('section_code');

Существует метод, который допускает к использованию только букв и цифр.

Ограничение параметра только по буквам и цифрам

Route::get('/post/{post_code}', function ($post_code) {
    //
})->whereAlphaNumeric('post_code');

Каждый из приведённых методов позволяет настраивать маршруты приложения согласно требованиям проекта. Существуют типовые параметры, которые часто повторяются в разных маршрутах. Например, тот же параметр «id». Для этих случаев бывает удобно задать ограничение глобально. При большом количестве маршрутов это избавляет от необходимости прописывания правил проверки для каждого маршрута.

Глобальные ограничения параметров

В файле App\Providers\RouteServiceProvider.php в методе boot необходимо прописать правило:

public function boot()
{
    Route::pattern('id', '[0-9]+');
}

Это ограничение будет распространяться на все маршруты, где есть параметр id. Поэтому прописывать ограничение для отдельных маршрутов в этом случае нет необходимости:

Route::get('/post/{id}', function ($id) {
    return 'ID поста: '.$id; // сработает, если id - числовое значение
});

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

Опубликован: 08.10.2024 г.

См. также:

Необязательные параметры маршрутов в Laravel
Как выбрать записи за определённый период (День, Месяц, Год) в Laravel?
Использование метода leftJoin() для выборки из нескольких таблиц в Laravel
Как просмотреть SQL запрос в Eloquent Laravel?
Как объявить переменную в шаблоне Laravel Blade?
Проверка на пустоту коллекций Eloquent в Laravel
Как получить URL текущей страницы в Laravel?
Как вывести роуты Laravel в отдельный файл?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта