Symfony2:在控制器操作中,表单字段外设置表单字段值

10

我需要设置一个Symfony2表单元素的值。

我使用Doctrine2实体、Symfony\Component\Form\AbstractType和在我的Controller动作里面使用createForm()方法。

$saleDataForm = $this->createForm(new SaleType(), $sale);
现在,我该如何从表单中获取一个元素,并且如何设置它的值? 我想做这样的事情,但它并不起作用:
$saleDataForm->get('image')->setValue('someimapge.jpg');

顺便提一下:我需要这样做来正确呈现该字段(使用这种方法,我的图像字段总是空白的,我需要将其设置为imagePath的内容以展示上传图像的预览)

3个回答

14

为了得到更精确的答案,您应该在此表单中包含您使用的实体,以便我们可以查看getter和setter。但基于您的问题,以下方法应该可行: 在控制器内执行以下操作:

$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();

6
仅适用于映射字段。如何处理非映射字段? - Nelson Teixeira

5
感谢MatsRietdijk的帮助,但我不得不将代码更改为以下内容。
$form = $this->createForm(new SaleType(), $sale);
$form->getData()->setImage('someimage.jpg');
$form->setData($form->getData());

2

如果您尝试填写文件上传字段,那是错误的想法。问问自己:应该在那里放什么数据?如果用户上传一张图片,那么该字段中将包含指向他本地系统上该图片的路径。但是上传文件后,您会更改其名称和位置,因此您不需要有关此路径的信息,也不会保存它。

适当的方法是将下面(或上面或您放置它的任何地方)的上传字段留空。然后,在提交表单后,如果该字段不为空,您应该更改编辑过的图片。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接