Зарегистрируйтесь, чтобы продолжить обучение

CRUD: Удаление Веб-разработка на PHP

Удаление устроено проще, чем вывод. При этом оно включает в себя много нюансов. Вместо привычных GET и POST удаление делается запросом DELETE:

CRUD Удаление

<?php

$router = $app->getRouteCollector()->getRouteParser();

$app->delete('/schools/{id}', function ($request, $response, array $args) use ($router) {
    $repo = new App\SchoolRepository();
    $id = $args['id'];
    $repo->destroy($id);
    $this->get('flash')->addMessage('success', 'School has been deleted');
    return $response->withRedirect($router->urlFor('schools'));
});

В процессе удаления есть и интерфейсный момент, который начинающие разработчики упускают из виду.

Кнопка удаления не должна сразу удалять. Человеку свойственно ошибаться. Вероятность, что он нажмет на эту кнопку по ошибке — высока. По этой причине нужно спросить у пользователя, уверен ли он в том, что хочет удалить. Если да, то только в этом случае удалять.

Еще удаление пользователя — опасная операция, которую нельзя выполнять всем подряд. Даже те, кто могут это делать, должны проходить через процедуру подтверждения. Это нужно, чтобы случайно не удалить пользователя.

Есть ли у пользователя доступ к конкретным действиям, определяется авторизацией. Она предоставляет определенному лицу или группе лиц права на выполнение определенных действий. Также это процесс проверки и подтверждения данных прав при попытке выполнения этих действий.

Часто авторизацию путают с аутентификацией. Но второе — это процедура проверки легальности пользователя или данных, например, проверки соответствия введенного пользователем пароля к учетной записи паролю Wiki.

Получается, что перед выполнением действия необходимо проверить, авторизован ли пользователь на выполнение данного действия или нет.

Авторизация — отдельная большая тема со своей теоретической базой. Как правило, вопрос авторизации решается в каждом фреймворке самостоятельно, хотя на GitHub можно найти обобщенные библиотеки.

Теперь рассмотрим отправку запроса на удаление.

HTML-формы не поддерживают отправку методами, отличными от GET и POST. Фреймворки выкручиваются из этой ситуации следующим образом. Если в форме задать скрытое поле с именем _METHOD и значением того метода, который нам нужен, то внутри фреймворка до входа в обработчик глагол заменится на тот, что был указан. Таким нехитрым способом фреймворки позволяют посылать любые запросы:

<form action="/users/<?= $user['id'] ?>" method="post">
  <input type="hidden" name="_METHOD" value="DELETE">
  <input type="submit" value="Remove">
</form>

Чтобы включить эту возможность, нужно добавить немного конфигурации в Slim:

<?php

use Slim\Middleware\MethodOverrideMiddleware;

$app = AppFactory::create();
$app->add(MethodOverrideMiddleware::class);

Семантику HTTP важно соблюдать. Нельзя создавать HTML, в котором удаление происходит GET-запросом, например, по ссылке.

Браузеры, их плагины и поисковые системы действуют в соответствии с семантикой HTTP. Если они видят обычную ссылку, то подразумевается, что она не может выполнить деструктивных действий, значит, ее можно посетить.

Мы можем работать в закрытой от поисковиков части сайта. Но в браузерах встроен механизм предзагрузки страниц, вызывающий ссылки, до которых сможет дотянуться на открытой странице. А плагины могут делать всё, что угодно.


Самостоятельная работа

  1. Реализуйте удаление пользователей.

Дополнительные материалы

  1. Библиотека для автоматизации фронтенд-части (подстановка правильных глаголов, подтверждение)

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»