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
Если вы попытаетесь заполнить поле для загрузки файла - это неправильная идея. Спросите себя: какие данные должны быть там? Если пользователь загружает изображение, то в этом поле будет путь к изображению в его локальной системе. Но затем после загрузки файла вы меняете свое имя и местоположение, поэтому вам не нужна информация об этом пути, и вы просто не храните его.
Соответствующий способ должен быть оставлен пустым полем для загрузки ниже (или выше или где бы вы ни были;)). Затем после отправки формы и если поле не пустое, вы должны изменить отредактированное изображение.