Выполните некоторую очистку при удалении записи в 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.