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>