Использование Symfony 1.4.5 с доктриной
У меня есть модель, которая включает загруженное изображение как один из столбцов - создание и обновление записи прекрасны (использование doSave () метод для контакта с загрузкой и любыми изменениями в файле).
Проблема, которую я имею, состоит в том, если запись удалена - я хочу, чтобы она удалила связанный файл также. Но я не могу найти так или иначе, чтобы сделать это после нескольких часов поиска через документацию и Google.
Существует ли способ указать некоторый постудалять код?
Окончательное решение:
в /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 за то, что указал мне верное направление
Я давно не пользовался Doctrine, но, кажется, я помню, что там есть функция post delete hook, которую можно использовать для подобных вещей. Если вы посмотрите в источник базового класса Doctrine, вы сможете найти точное название метода и его использование.
EDIT: Метод называется postDelete()
и находится в классе Doctrine_Record
Вот раздел из документации Symfony, в котором рассматривается расширенное использование Doctrine.
Увлекая ответ полковника Спонса, метод 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()
в нужное время.