Выполните некоторую очистку при удалении записи в Symfony / Doctrine - PullRequest
6 голосов
/ 20 июня 2010

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 21 июня 2010

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

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

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

2 голосов
/ 20 июня 2010

Похищение ответа полковника Спонс, метод 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 голосов
/ 20 июня 2010

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

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

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

...