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

Использование Symfony 1.4.5 с доктриной

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

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

Существует ли способ указать некоторый постудалять код?

6
задан HorusKol 20 June 2010 в 12:05
поделиться

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);
  }
}

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

6
ответ дан 10 December 2019 в 00:33
поделиться

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

EDIT: Метод называется postDelete() и находится в классе Doctrine_Record

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

2
ответ дан 10 December 2019 в 00:33
поделиться

Увлекая ответ полковника Спонса, метод 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() в нужное время.

2
ответ дан 10 December 2019 в 00:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: