Самое время начать писать о новых возможностях Laravel 5.2! Вы наверняка заметите, что многие нововведения просты как в изучении, так и в использовании. Может даже показаться, что этот релиз меньше предыдущего. Но многие функции версии 5.2 сильно отразятся на простоте и удобстве повседневной работы. Это одна из статей о новых функциях Laravel 5.2. Скоро будут ещё, не пропустите. {{Cut}} 1. ((https://laravel.ru/posts/354 Проверка массива формы в Laravel 5.2)) 2. ((https://laravel.ru/posts/372 Неявная привязка модели маршрута в Laravel 5.2)) 3. ((https://laravel.ru/posts/379 Ограничение скорости запросов API в Laravel 5.2)) 4. ((https://laravel.ru/posts/380 Заготовка авторизации в Laravel 5.2)) 5. ((https://laravel.ru/posts/381 Множественные драйверы защиты авторизации (включая API) в Laravel 5.2)) == Краткое введение в массивы html-форм == Проверка массива формы упрощает процесс проверки каких-либо нестандартных видов данных в HTML-формах при использовании массивов. Если вы с такими не сталкивались, то один из примеров их использования - когда вы разрешаете пользователю добавлять несколько экземпляров одинакового типа на одной форме. Давайте предположим, что у вас есть форма, где пользователь добавляет **компанию** и может добавить в неё столько **сотрудников**, сколько захочет. У каждого **сотрудника** есть имя и должность. Вот наш HTML. Предположим, что у нас есть некий JavaScript код, который создает новый div %%(t)"employee"%% при нажатии на кнопку "Добавить сотрудника". И добавить их можно сколько угодно. %%(html)

Employees

Добавить сотрудника
%% Когда вы заполните и отправите эту форму, она будет в виде %%(t)$_POST%%: %%(t) array(2) { ["name"]=> string(10) "Acme, Inc." ["employee"]=> array(2) { [1]=> array(2) { ["name"]=> string(10) "Joe Schmoe" ["title"]=> string(11) "Head Person" } [2]=> array(2) { ["name"]=> string(18) "Conchita Albatross" ["title"]=> string(21) "Executive Head Person" } } } %% Как вы уже заметили, мы получаем "объект" %%(t)employee%%, содержащий переданный массив ID c парами ключ/значение "имя поля" => "значение, введённое пользователем". .(alert) Общепринято просто создавать каждый экземпляр с полем "employee name". Например, просто %%(t)employee[][name]%%, не устанавливая ID вручную. //Не делайте этого.// Так будет намного сложнее работать с кодом. Но как нам это проверить? До версии 5.2 это делалось вручную. Теперь же Laravel понимает эту вложенную структуру и может однозначно идентифицировать её. == Написание правил проверки массива формы == Как мы будем это делать? Давайте посмотрим на обычный валидатор: %% // CompaniesController.php public function store(Request $request) { $this->validate($request->all(), [ 'name' => 'required|string' ]); // Сохранение и т.д. } %% А теперь давайте добавим проверку для полей сотрудников нашей компании: %% // CompaniesController.php public function store(Request $request) { $this->validate($request->all(), [ 'name' => 'required|string', 'employee.*.name' => 'required|string', 'employee.*.title' => 'string', ]); // Сохранение и т.д. } %% Теперь мы однозначно проверяем каждое %%(t)employee[*][name]%% и %%(t)employee[*][title]%% без каких-либо усилий с нашей стороны. Просто и красиво. == PS == Вы, возможно, заметили, что форма валидатора %%(t)employee.*.name%% содержит звёздочку в середине, которая как бы намекает нам, что мы могли бы поместить туда что-нибудь другое. Что если вместо звёздочки, указывающей на "всех", вы вставите конкретное число? Оказывается в таком случае будет проверен только объект с указанным ID. Например, если вы вставите в проверочный массив %%(t)employee.1.name%% вместо %%(t)employee.*.name%%, то согласно этому правилу будет проверен только сотрудник с ID равным 1. Я не знаю, зачем и когда вам это понадобится, но фактически вы можете установить отдельные правила проверки для каждого ID: %% $this->validate($request->all(), [ 'employee.1.name' => 'required|string', 'employee.2.name' => 'integer', // Не знаю, *зачем* вам это нужно, но это возможно ]); %% Вот и всё. Наслаждайтесь!