HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Процесс создания круда пользователя включает минимум семь маршрутов. Два из них - просмотр списка и конкретного ресурса - мы уже разобрали. В этом уроке разберем следующие два, которые относятся к созданию сущности.</p>
1 <p>Процесс создания круда пользователя включает минимум семь маршрутов. Два из них - просмотр списка и конкретного ресурса - мы уже разобрали. В этом уроке разберем следующие два, которые относятся к созданию сущности.</p>
2 <h2>Создание сущности</h2>
2 <h2>Создание сущности</h2>
3 <p>Создание сущности подразумевает работу с модифицирующей формой, и как мы знаем, включает в себя два действия: отображение формы и обработка данных формы. За каждое из этих действий отвечает свой маршрут. Вот несколько примеров:</p>
3 <p>Создание сущности подразумевает работу с модифицирующей формой, и как мы знаем, включает в себя два действия: отображение формы и обработка данных формы. За каждое из этих действий отвечает свой маршрут. Вот несколько примеров:</p>
4 <p><strong>Пользователь</strong></p>
4 <p><strong>Пользователь</strong></p>
5 <ul><li>GET /users/new</li>
5 <ul><li>GET /users/new</li>
6 <li>POST /users</li>
6 <li>POST /users</li>
7 </ul><p><strong>Курс</strong></p>
7 </ul><p><strong>Курс</strong></p>
8 <ul><li>GET /courses/new</li>
8 <ul><li>GET /courses/new</li>
9 <li>POST /courses</li>
9 <li>POST /courses</li>
10 </ul><p><strong>Сотрудник компании (пример вложенного маршрута)</strong></p>
10 </ul><p><strong>Сотрудник компании (пример вложенного маршрута)</strong></p>
11 <ul><li>GET /companies/3/users/new</li>
11 <ul><li>GET /companies/3/users/new</li>
12 <li>POST /companies/3/users</li>
12 <li>POST /companies/3/users</li>
13 </ul><p>Разберем каждое действие подробнее.</p>
13 </ul><p>Разберем каждое действие подробнее.</p>
14 <h3>Отображение формы</h3>
14 <h3>Отображение формы</h3>
15 <p><strong>Обработчик</strong></p>
15 <p><strong>Обработчик</strong></p>
16 <p><strong>Шаблон</strong></p>
16 <p><strong>Шаблон</strong></p>
17 <p>Содержимое обработчика сильно зависит от того, какой используется инструментарий. Если мы применяем билдеры формы, то обработчик создает форму как объект и отправляет его в шаблон. Билдер берет на себя огромное количество задач: обрабатывает вывод ошибок, занимается валидацией и подготовкой данных.</p>
17 <p>Содержимое обработчика сильно зависит от того, какой используется инструментарий. Если мы применяем билдеры формы, то обработчик создает форму как объект и отправляет его в шаблон. Билдер берет на себя огромное количество задач: обрабатывает вывод ошибок, занимается валидацией и подготовкой данных.</p>
18 <p>Особо умные билдеры знают про ту сущность, с которой они работают, и могут строить формы в полностью автоматическом режиме.</p>
18 <p>Особо умные билдеры знают про ту сущность, с которой они работают, и могут строить формы в полностью автоматическом режиме.</p>
19 <p>В нашем примере такого нет, поэтому все действия делаются руками. В форму мы передаем пустые данные, так как еще ничего не введено пользователем. Кроме данных в шаблон передается список errors. Это нужно, так как форма в шаблоне будет использоваться двумя обработчиками: одним только для отображения новой формы, другим - для отображения формы в случае наличия ошибок.</p>
19 <p>В нашем примере такого нет, поэтому все действия делаются руками. В форму мы передаем пустые данные, так как еще ничего не введено пользователем. Кроме данных в шаблон передается список errors. Это нужно, так как форма в шаблоне будет использоваться двумя обработчиками: одним только для отображения новой формы, другим - для отображения формы в случае наличия ошибок.</p>
20 <h3>Обработка данных формы</h3>
20 <h3>Обработка данных формы</h3>
21 <p>Обработка формы нам уже знакома - извлекаем данные и валидируем. Если данные корректны, то выполняется основная логика обработчика - происходит сохранение школы в базу данных repo.save(data), а затем редирект на список школ с оповещением через флеш об успешном добавлении.</p>
21 <p>Обработка формы нам уже знакома - извлекаем данные и валидируем. Если данные корректны, то выполняется основная логика обработчика - происходит сохранение школы в базу данных repo.save(data), а затем редирект на список школ с оповещением через флеш об успешном добавлении.</p>
22 <p>Если данные оказались не валидны, то этот обработчик рисует форму обработчика new со всеми его введенными данными (чтобы пользователю не пришлось вновь их вводить) и ошибками. Затем отправляет ее вместе с кодом ответа 422 - Unprocessable Entity.</p>
22 <p>Если данные оказались не валидны, то этот обработчик рисует форму обработчика new со всеми его введенными данными (чтобы пользователю не пришлось вновь их вводить) и ошибками. Затем отправляет ее вместе с кодом ответа 422 - Unprocessable Entity.</p>
23 <p>На этом создание сущности заканчивается. Следующим шагом научимся ее обновлять.</p>
23 <p>На этом создание сущности заканчивается. Следующим шагом научимся ее обновлять.</p>