Несмотря на огромное число разнообразных сайтов, практически всю веб разработку можно свести к CRUD операциям. CRUD широко распространенный термин, означающий 4 стандартные операции над любой сущностью (ресурсом): создание, чтение, обновление и удаление. Например, в случае с пользователем можно составить такое соответствие:
Create
Read
Update
Delete
Точно так же можно расписать действия над любыми другими ресурсами, фотографиями пользователя, его друзьями, сообщениями и т.п.
Хозяйке на заметку. Иногда в качестве шутки веб-разработчиков называют крудошлепами, а фронтенд-разработчиков формошлепами :D
Создание полного круда включает в себя следующие действия:
Новички тратят на создание такого круда не один день. У опытного разработчика, в прокачанном фреймворке, этот процесс занимает максимум часы. Slim, как и другие микрофреймворки, не предоставляет никаких средств автоматизации, поэтому придется многое делать руками. В целях обучения это оправданно, но в промышленной разработке, то что может быть автоматизировано, должно быть автоматизировано.
Ниже мы пройдемся по всему процессу создания круда пользователя за исключением работы с базой данных и тестов. Начнем с роутинга. Полный круд пользователя включает минимум 7 маршрутов. Их может быть больше, так как любое из действий может повторяться не один раз.
Метод | Маршрут | Шаблон | Описание |
---|---|---|---|
GET | /users | users/index.phtml | Список пользователей |
GET | /users/{id} | users/show.phtml | Профиль пользователя |
GET | /users/new | users/new.phtml | Форма создания нового пользователя |
POST | /users | Создание нового пользователя | |
GET | /users/{id}/edit | users/edit.phtml | Форма редактирования пользователя |
PATCH/PUT | /users/{id} | Обновление пользователя | |
DELETE | /users/{id} | Удаление пользователя |
Такое соглашение изначально появилось в Rails и затем было адаптировано во многих фреймворках на языках отличных от Ruby.
В этом уроке мы разберем первые два маршрута (просмотр списка и конкретного ресурса), а остальные в следующих уроках.
Вывод списка чего-нибудь мы уже делали не раз. Повторим для закрепления. Общий алгоритм действий такого обработчика всегда проходит по одному сценарию и не зависит от языка программирования:
Обычно в этот список добавляют различные действия, которые можно выполнять над сущностями, например, редактирование, удаление или просмотр.
Обработчик
<?php
$app->get('/schools', function ($request, $response) {
$repository = new App\SchoolRepository();
$schools = $repository->all();
$params = ['schools' => $schools];
return $this->get('renderer')->render($response, "schools/index.phtml", $params);
})->setName('schools');
Шаблон
<table>
<?php foreach ($schools as $school): ?>
<tr>
<td>
<?= $school['id'] ?>
</td>
<td>
<a href="/schools/<?= $school['id'] ?>"><?= $school['name'] ?></a>
</td>
</tr>
<?php endforeach ?>
</table>
Страница конкретной сущности. Например на Хекслете к таким страницам относятся: профиль пользователя, страница курса, страница профессии, страница урока и многие другие. Как и в случае со списком, порядок действий для отображения всегда один и тот же:
Обработчик
<?php
$app->get('/schools/{id}', function ($request, $response, array $args) {
$id = $args['id'];
$repository = new App\SchoolRepository();
$school = $repository->find($id);
$params = [
'school' => $school
];
return $this->get('renderer')->render($response, 'school/show.phtml', $params);
})->setName('school');
Шаблон
<?php foreach ($school as $key => $value): ?>
<div>
<?= $key ?>: <?= $value ?>
</div>
<?php endforeach ?>
А если сущность была удалена или ее вообще не существовало, как тогда должен вести себя сайт? С точки зрения HTTP такой адрес должен вернуть HTTP код 404. Сделать это можно явно, вернув соответствующий ответ.
<?php
$app->get('/schools/{id}', function ($request, $response, array $args) use ($repo) {
$id = $args['id'];
$school = $repo->find($id);
if (!$school) {
return $response->write('Page not found')
->withStatus(404);
}
})->setName('school');
Но обычно механизм обработки таких ошибок построен через исключения. С ними мы познакомимся в следующих курсах.
Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт