HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Несмотря на огромное число разнообразных сайтов, практически всю веб-разработку можно свести к<a>CRUD</a>-операциям.</p>
1 <p>Несмотря на огромное число разнообразных сайтов, практически всю веб-разработку можно свести к<a>CRUD</a>-операциям.</p>
2 <p>CRUD означает четыре стандартные операции над любой сущностью: создание, чтение, обновление и удаление. Например, в случае с пользователем можно составить такое соответствие:</p>
2 <p>CRUD означает четыре стандартные операции над любой сущностью: создание, чтение, обновление и удаление. Например, в случае с пользователем можно составить такое соответствие:</p>
3 <p><strong>Create</strong></p>
3 <p><strong>Create</strong></p>
4 <ul><li>Регистрация</li>
4 <ul><li>Регистрация</li>
5 </ul><p><strong>Read</strong></p>
5 </ul><p><strong>Read</strong></p>
6 <ul><li>Просмотр профиля пользователями сайта</li>
6 <ul><li>Просмотр профиля пользователями сайта</li>
7 <li>Просмотр пользователя в административном интерфейсе</li>
7 <li>Просмотр пользователя в административном интерфейсе</li>
8 </ul><p><strong>Update</strong></p>
8 </ul><p><strong>Update</strong></p>
9 <ul><li>Обновление личных данных</li>
9 <ul><li>Обновление личных данных</li>
10 <li>Смена емейла</li>
10 <li>Смена емейла</li>
11 <li>Смена пароля</li>
11 <li>Смена пароля</li>
12 </ul><p><strong>Delete</strong></p>
12 </ul><p><strong>Delete</strong></p>
13 <ul><li>Удаление</li>
13 <ul><li>Удаление</li>
14 </ul><p>Точно так же можно расписать действия над любыми другими ресурсами, фотографиями пользователя, его друзьями, сообщениями.</p>
14 </ul><p>Точно так же можно расписать действия над любыми другими ресурсами, фотографиями пользователя, его друзьями, сообщениями.</p>
15 <p>Создание полного круда включает в себя следующие действия:</p>
15 <p>Создание полного круда включает в себя следующие действия:</p>
16 <ul><li>Создание сущности в коде (как правило, класса)</li>
16 <ul><li>Создание сущности в коде (как правило, класса)</li>
17 <li>Добавление таблицы в базу</li>
17 <li>Добавление таблицы в базу</li>
18 <li>Написание тестов на обработчики</li>
18 <li>Написание тестов на обработчики</li>
19 <li>Добавление обработчиков</li>
19 <li>Добавление обработчиков</li>
20 <li>Добавление шаблонов</li>
20 <li>Добавление шаблонов</li>
21 </ul><p>Новички тратят на создание такого круда не один день. У опытного разработчика в прокачанном фреймворке этот процесс занимает максимум часы. Slim не предоставляет средств автоматизации, поэтому придется многое делать руками. В целях обучения это оправданно, но в промышленной разработке, то что может быть автоматизировано, должно быть автоматизировано.</p>
21 </ul><p>Новички тратят на создание такого круда не один день. У опытного разработчика в прокачанном фреймворке этот процесс занимает максимум часы. Slim не предоставляет средств автоматизации, поэтому придется многое делать руками. В целях обучения это оправданно, но в промышленной разработке, то что может быть автоматизировано, должно быть автоматизировано.</p>
22 <p>Ниже мы пройдемся по всему процессу создания круда пользователя за исключением работы с базой данных и тестов. Начнем с роутинга.</p>
22 <p>Ниже мы пройдемся по всему процессу создания круда пользователя за исключением работы с базой данных и тестов. Начнем с роутинга.</p>
23 <p>Полный круд пользователя включает минимум семь маршрутов. Их может быть больше, так как любое из действий может повторяться не один раз.</p>
23 <p>Полный круд пользователя включает минимум семь маршрутов. Их может быть больше, так как любое из действий может повторяться не один раз.</p>
24 <p>Такое соглашение изначально появилось в Rails и затем было адаптировано во многих фреймворках на языках, отличных от Ruby.</p>
24 <p>Такое соглашение изначально появилось в Rails и затем было адаптировано во многих фреймворках на языках, отличных от Ruby.</p>
25 <p>В этом уроке мы разберем первые два маршрута: просмотр списка и конкретного ресурса. Остальные рассмотрим в следующих уроках.</p>
25 <p>В этом уроке мы разберем первые два маршрута: просмотр списка и конкретного ресурса. Остальные рассмотрим в следующих уроках.</p>
26 <h2>Список (index)</h2>
26 <h2>Список (index)</h2>
27 <p>Вывод списка мы уже делали не раз. Повторим для закрепления. Общий алгоритм действий такого обработчика всегда проходит по одному сценарию и не зависит от языка программирования:</p>
27 <p>Вывод списка мы уже делали не раз. Повторим для закрепления. Общий алгоритм действий такого обработчика всегда проходит по одному сценарию и не зависит от языка программирования:</p>
28 <ol><li>Извлекаем список из хранилища (базы данных). Обычно с учетом пейджинга</li>
28 <ol><li>Извлекаем список из хранилища (базы данных). Обычно с учетом пейджинга</li>
29 <li>Передаем данные в шаблон</li>
29 <li>Передаем данные в шаблон</li>
30 <li>Выводим данные в шаблоне, используя цикл</li>
30 <li>Выводим данные в шаблоне, используя цикл</li>
31 </ol><p>Обычно в этот список добавляют различные действия, которые можно выполнять над сущностями, например, редактирование, удаление или просмотр.</p>
31 </ol><p>Обычно в этот список добавляют различные действия, которые можно выполнять над сущностями, например, редактирование, удаление или просмотр.</p>
32 <p><strong>Обработчик</strong></p>
32 <p><strong>Обработчик</strong></p>
33 <p><strong>Шаблон</strong></p>
33 <p><strong>Шаблон</strong></p>
34 <h2>Отображение (show)</h2>
34 <h2>Отображение (show)</h2>
35 <p>Страница конкретной сущности. Например на Хекслете к таким страницам относятся: профиль пользователя, страница курса, страница профессии, страница урока и многие другие. Как и в случае со списком, порядок действий для отображения всегда один:</p>
35 <p>Страница конкретной сущности. Например на Хекслете к таким страницам относятся: профиль пользователя, страница курса, страница профессии, страница урока и многие другие. Как и в случае со списком, порядок действий для отображения всегда один:</p>
36 <ol><li>Из адреса извлекается идентификатор сущности</li>
36 <ol><li>Из адреса извлекается идентификатор сущности</li>
37 <li>Выполняется поиск сущности в хранилище</li>
37 <li>Выполняется поиск сущности в хранилище</li>
38 <li>Она передается в шаблон</li>
38 <li>Она передается в шаблон</li>
39 <li>В шаблоне рисуется красивый вывод</li>
39 <li>В шаблоне рисуется красивый вывод</li>
40 </ol><p><strong>Обработчик</strong></p>
40 </ol><p><strong>Обработчик</strong></p>
41 <p><strong>Шаблон</strong></p>
41 <p><strong>Шаблон</strong></p>
42 <p>Если сущность была удалена или ее вообще не существовало, как тогда должен вести себя сайт? С точки зрения HTTP такой адрес должен вернуть HTTP-код 404. Сделать это можно явно, вернув соответствующий ответ:</p>
42 <p>Если сущность была удалена или ее вообще не существовало, как тогда должен вести себя сайт? С точки зрения HTTP такой адрес должен вернуть HTTP-код 404. Сделать это можно явно, вернув соответствующий ответ:</p>
43 <p>Обычно механизм обработки таких ошибок построен через исключения. С ними мы познакомимся в следующих курсах.</p>
43 <p>Обычно механизм обработки таких ошибок построен через исключения. С ними мы познакомимся в следующих курсах.</p>