{{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 предоставляет несколько разных подходов к проверке входящих в ваше приложение данных. По умолчанию базовый класс контроллера использует типаж %%(t)ValidatesRequests%%, который предоставляет удобный метод проверки входящего HTTP-запроса с помощью различных мощных правил проверки. == Краткое руководство по проверке ввода == Для изучения мощных возможностей проверки ввода в Laravel, давайте рассмотрим полный пример проверки ввода через форму и вывода сообщений об ошибках. === Определение маршрутов === Сначала давайте предположим, что у нас есть следующие маршруты, определённые в файле %%(t)routes/web.php%%: %% Route::get('post/create', 'PostController@create'); Route::post('post', 'PostController@store'); %% Очевидно, маршрут %%(t)GET%% выведет пользователю форму для написания новой статьи, а маршрут %%(t)POST%% сохранит её в БД. == Создание контроллера == Теперь давайте посмотрим на простой контроллер, который обрабатывает эти маршруты. Метод %%store()%% мы пока оставим пустым: %% validate($request, [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); // Статья прошла проверку, сохранение в БД... } %% Как видите, мы просто передали входящий HTTP-запрос и требуемые правила проверки в метод %%validate()%%. Если проверка провалится, будет сгенерирован соответствующий отклик. Если проверка успешна, ваш контроллер продолжит нормально выполняться. %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) **Остановка после первой ошибки ввода** Иногда надо остановить выполнение правил проверки ввода для атрибута после первой ошибки. Для этого назначьте на атрибут правило %%(t)bail%%: ~%% $this->validate($request, [ 'title' => 'bail|required|unique:posts|max:255', 'body' => 'required', ]); ~%% Если правило %%(t)required%% на атрибуте %%(t)title%% не выполнится, то правило %%(t)unique%% не будет проверяться. Правила будут проверены в порядке их назначения. %% **Замечание о вложенных атрибутах** Если ваш HTTP-запрос содержит "вложенные" параметры, вы можете указать их в правилах проверки с помощью "точечной" записи: %% $this->validate($request, [ 'title' => 'required|unique:posts|max:255', 'author.name' => 'required', 'author.description' => 'required', ]); %% === Вывод ошибок === Что будет, если параметры входящего запроса не пройдут проверку? Как уже было сказано, Laravel автоматически перенаправит пользователя на предыдущую страницу. Вдобавок, все ошибки будут автоматически ((/docs/v5/session#одноразовые отправлены в сессию)). Заметьте, мы не привязывали сообщения об ошибках к представлению в нашем маршруте %%(t)GET%%. Потому что Laravel проверяет наличие ошибок в данных сессии и автоматически привязывает их к представлению, если они доступны. **Поэтому важно помнить, что переменная %%$errors%% будет всегда доступна во всех ваших представлениях при каждом запросе**, позволяя вам всегда рассчитывать на то, что она определена и может быть безопасно использована. Переменная %%$errors%% будет экземпляром %%(t)Illuminate\Support\MessageBag%%. Более подробно о работе с этим объектом читайте ((/docs/v5/validation#работа_с_сообщениями_об_ошибках в его документации)). Переменная %%$errors%% привязывается к представлению посредником %%(t)Illuminate\View\Middleware\ShareErrorsFromSession%%, который входит в состав группы посредников %%(t)web%%. Итак, в нашем примере при неудачной проверке пользователь будет перенаправлен в метод %%create()%% нашего контроллера, позволяя нам вывести сообщения об ошибках в представлении: %%
:message
'); ~%% .(alert) По умолчанию сообщения форматируются в вид, который подходит для ((http://getbootstrap.com Bootstrap)). **Получение всех сообщений в заданном формате** ~%% foreach ($messages->all('