Изменение и удаление счетов

Решил подробнее описать, что нужно сделать для реализоации возможности изменения и удаления счетов. Добавление у нас уже работает, остальное выполняется по аналогии. Что мы реализовали для добавления счетов? А вот что:

  • метод add в контроллере accounts, отображающий представление с формой для добавления счета. Либо эту же форму можно поместить в другое представление (лишь бы удобно было);
  • обработчик формы добавления счета (у меня он называется post_insert) - специальный метод в контроллере (как указывать обработчик в форме говорилось в скинкасте). Ему передаются введенные пользователем данные.
  • метод добавления счета (insert) в модели account_model. Этот метод извлекает переданные пользователем данные из массива POST (он у нас используется неявно, через классы) и выполняет запрос в базу данных для добавления счета.

В принципе всё. После добавления счета нас возвращает на главную страницу. Конечно же, неавторизованные пользователи не могут ничего добавлять, это проверяется.

Перейдем к изменению счета:

  • метод edit в контроллере счетов. У метода один параметр ($acc_id) - номер счета, следовательно вызов формы изменения будет расположен по адресу /accounts/edit/n , где n - номер счета. Метод извлекает данные пользователя и формы (об этом ниже) из БД и передает их форме изменения счета;
  • метод get в модели account_model. Получает данные счета по его номеру и проверяет право изменения счета (сравнение id текущего пользователя с id владельца, указанным в таблице счетов (при добавлении счета)). Метод очень похож наметод получения всех счетов пользователя, но с дополнительным условием проверки id счета, который передается методу в виде параметра.
  • представление изменения счета. Содержит форму изменения счета. Получается данные для отображения от контроллера.
  • обработчик формы изменения счета (post_update). Набор полей в форме полагаю вы сможете определить.
  • метод update в модели account_model. Обновляющий запись в таблице. Обновление реализуется следующим образом. В массив $data собираете все нужные столбцы в таблице счета. Сам запрос на обновление выглядит так:
    $this->db->where('user_id', (int)$data['user_id']); // ограничение на измение владельцем
    $this->db->where('id', (int)$data['id']); // ограничение по id счета (нужно обновить только один, изменяемый)
    $this->db->update('accounts', $data); // выполнение запроса

Если владелец не тот, то просто ничего не сохранится.

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

Для реализации удаления счета, делаем почти все тоже самое. Изменения:

  • вместо представления с формой удаления, у нас предупреждение об удалении (это тоже форма с одной лишь кнопкой, номер удаляемого счета можно передать скрытым полем)
  • вместо метода обновления в модели - метод удаления. Код удаления из модели:
    $this->db->where('id = ', $id); // id счета
    $this->db->where('user_id = ', (int)$user_id); // ограничение по владельцу
    $this->db->delete('accounts'); // само удаление строк, подходящих по ограничениям

Вот вроде и всё. Жду от вас реализации))

вернуться назад