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>