2016-02-10 4 views
4

У меня есть форма в моем приложении Symfony2, где я прошу пользователя загрузить файл. Это поле не требуется. В настоящее время я обрабатываю файл Зайти с помощью следующей команды:Загрузка файла для Symfony 2 по умолчанию

$file = $form['attachement']->getData(); 

Мой вопрос, как я могу установить файл по умолчанию в случае $ файла возвращает NULL, то есть пользователь не хочет, чтобы загрузить любой файл? Спасибо.

ответ

1

Во-первых, вам необходимо создать действительный объект из файла по умолчанию.
Для этого используйте Symfony\Component\HttpFoundation\File.

Использование: $file = new File('path/of/your/default/file');

Затем вы должны обновить свою форму до того, как привязка данных выполняется.
Для этого у вас есть два решения:

1- Используйте FormEvent, чтобы вручную установить файл, если поле равно null. (например, PRE_SUBMIT и POST_SUBMIT)

2- Используйте в вашем объекте крюк prePersist/preUpdate. (Не включает в себя перемещение вашей логики, не привязанное к нему свойство «вложение» должно существовать в вашей организации)

Для варианта 1 см. Главу поваренной книги Dynamic form modification и найдите присвоенное событие (документация предоставит информацию, чтобы выбрать его).

Для 2, см. Главу документации доктрины Events.
Что-то вроде следующего должен делать эту работу:

/** 
* @ORM\HasLifecycleCallbacks 
*/ 
class YourEntity { 
    /** 
    * 
    * @ORM\PrePersist 
    * @ORM\PreUpdate 
    */ 
    public function manageFile() 
    { 
     if ($this->attachment === null) { 
      $file = new File('path/of/your/default/file'); 
      $this->setAttachment($file); 
     } 
    } 
} 

Я надеюсь, что это достаточно для вас.

+0

Спасибо. Фактически '$ file = new File ('путь/of/ваш/default/file '); 'было достаточно, чтобы сделать все)) – Jack

0

Я думаю, доктрина Lifecycle Events должна вам помочь. Используйте prePersist или preUpdate. Событие для проверки: $this->file === null и установить значение по умолчанию.

+0

В настоящее время я проверяю, является ли файл! = Null в моем контроллере. Проблема в том, что я хочу установить файл по умолчанию в else, но я не могу найти для него функцию. Если я использую setFile («файл/путь»), я получаю вызов функции-члена setFile() в нуле. – Jack

+0

@Jack, вы можете переместить эту логику от контроллера к объекту. Он позволяет установить значение по умолчанию во времени, когда сущность создана. Это то, что вы хотите? –

+0

На самом деле я хотел бы оставить его в контроллере, как сейчас. Но если для этого нет способа, я бы переместил его в сущность. Я прочитал документы о обратных вызовах Lifecycle, но не нашел никакой информации о том, как установить файл по умолчанию либо ((возможно, кто-нибудь мог бы указать на него? – Jack

Смежные вопросы