Symfony2: изменить загрузку файлов - PullRequest
6 голосов
/ 01 апреля 2012

Я использую статью из кулинарной книги symfony.com для реализации опции загрузки файлов для изображений.

Теперь я хочу загрузить другие изображения в сущность.

Стратегия по умолчанию дляредактирование: 1. Извлечение из БД 2. Внедрение в форму 3. Сохранение

Каким-то образом эта стратегия больше не работает при загрузке файлов (доктрина не выполняет события)

Что еще я могу сделать, чтобы статьи с картинками редактировались?

Ответы [ 3 ]

10 голосов
/ 02 апреля 2012

Кулинарная книга не обрабатывает обновления , особенно в случае, когда изменяется только файл.

В этом случае событие PreUpdate не вызывается, поэтому вам нужно вручную вызвать $entity->preUpload() перед $em->persist($entity), чтобы загрузка файла была обработана в любом случае (preUpload изменит $entity->path, поэтому настойчивое произойдет)

7 голосов
/ 09 августа 2013

Если вы измените только поле загрузки, жизненный цикл которого не запускается методом загрузки, в поваренной книге сообщается о решении в поле для цитаты, как показано ниже:

Обратные вызовы PreUpdate и PostUpdate срабатывают только при наличии изменение в одном из полей объекта, которые сохраняются. Это означает что по умолчанию, если вы изменяете только свойство $ file, эти события не сработает, так как само свойство не является прямым сохранилось через доктрину. Одним из решений будет использование обновленного поля это сохраняется в доктрине, и изменять его вручную при изменении файл.

добавить фиктивное поле для обновления в контроллере перед сохранением события, как предполагает этот аргумент:

https://github.com/symfony/symfony-docs/pull/564

public function setFile(UploadedFile $file)
{
    $this->file = $file;
    $this->updatedAt = new \DateTime();
}
0 голосов
/ 07 августа 2018

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

Полный пример класса действий приведен ниже:

https://github.com/marekz/php_examples/wiki/Symfony-how-to-edit-attachment-form

...