Symfony2: установка значения поля формы вне формы, внутри действия контроллера

Мне нужно установить значение элемента формы symfony2. Я использую объект doctrine2, Symfony\Component\Form\AbstractType и метод createForm() внутри моего действия с контроллерами.

$saleDataForm = $this->createForm(new SaleType(), $sale);

Теперь, как я могу получить элемент из этой формы, и как я могу установить его значение? Я хочу сделать что-то подобное, но это не работает:

$saleDataForm->get('image')->setValue('someimapge.jpg');

FYI: Мне нужно сделать это, чтобы правильно отобразить поле (используя этот подход, мое поле изображения всегда пустое, и мне нужно установить это к содержимому imagePath, чтобы представить предварительный просмотр загруженного изображения)

Ответ 1

Для более точного ответа вы должны включить объекты, которые вы используете в этой форме, чтобы мы могли видеть геттеры и сеттеры. Но по вашему вопросу это должно работать: Внутри контроллера сделайте следующее:

$saleDataForm->getData()->getImage()->setValue('someimage.jpg');
$form->setData($form->getData());

Это, если форма уже создана так:

$saleDataForm = $this->createForm(new SaleType(), $sale);
$saleDataForm->getData()->getImage()->setValue('someimage.jpg');
$form->setData($form->getData());

Чтобы получить данные, используйте это:

$saleDataForm->getData()->getImage()->getValue();

Ответ 2

спасибо MatsRietdijk, вы мне помогли, но мне пришлось изменить код на этот

$form = $this->createForm(new SaleType(), $sale);
$form->getData()->setImage('someimage.jpg');
$form->setData($form->getData());

Ответ 3

Если вы попытаетесь заполнить поле для загрузки файла - это неправильная идея. Спросите себя: какие данные должны быть там? Если пользователь загружает изображение, то в этом поле будет путь к изображению в его локальной системе. Но затем после загрузки файла вы меняете свое имя и местоположение, поэтому вам не нужна информация об этом пути, и вы просто не храните его.

Соответствующий способ должен быть оставлен пустым полем для загрузки ниже (или выше или где бы вы ни были;)). Затем после отправки формы и если поле не пустое, вы должны изменить отредактированное изображение.