Выполните некоторую очистку при удалении записи в Symfony/Doctrine

Использование Symfony 1.4.5 с Doctrine

У меня есть модель, которая включает загруженное изображение в качестве одного из столбцов - создание и обновление записи в порядке (с помощью метода doSave() для загрузки и любых изменений в файле).

У меня проблема, если запись удалена - я хочу, чтобы она также удалила связанный файл. Но я не могу найти способ сделать это после нескольких часов поиска по документации и Google.

Есть ли способ указать какой-нибудь код после удаления?

3 ответа

Решение

Окончательное решение:

в /lib/model/doctrine/Image.class.php

class Image extends BaseImage
{
  public function postDelete()
  {
    $filename = $this->getFilename();

    $filepath = sfConfig::get('sf_upload_dir') . '/' . $filename;
    @unlink($filepath);
  }
}

Спасибо полковнику Спонзу за то, что он указал мне правильное направление

Угоняющий ответ полковника Спонс postDelete() Метод, безусловно, путь. +1 к нему:-) Но вам нужно включить обратные вызовы Doctrine в вашем config/ProjectConfiguration.class.php, Добавьте этот метод:

public function configureDoctrine(Doctrine_Manager $manager)
{
  $manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, true);
}

Очистите кэш Symfony, и Doctrine запустит методы обратного вызова, такие как postDelete() в подходящее время.

Прошло довольно много времени с тех пор, как я в последний раз использовал Doctrine, но я помню, что есть функция ловушки после удаления, которую вы можете использовать для такого рода вещей. Если вы заглянете в источник для базового класса Doctrine, вы сможете найти точное имя метода и его использование.

РЕДАКТИРОВАТЬ: метод postDelete() и находится в Doctrine_Record учебный класс

Вот раздел из документации Symfony, который описывает расширенное использование Doctrine.

Другие вопросы по тегам