Symfony2:创建表单时如何设置表单域的值

Posted

技术标签:

【中文标题】Symfony2:创建表单时如何设置表单域的值【英文标题】:Symfony2: How to set a value of a formfield when creating a form 【发布时间】:2014-03-19 16:17:09 【问题描述】:

我在调用这个路由的时候创建了一个表单:

/**
     * @Route("/product/id.html")
     * @Template()
     */
public function indexAction($id) 

$form = $this->createForm(new AssessmentType());

return array(
    'bewertungform' => $form->createView(),
    'angebot' => $this->loadAngebot($id)
);

然后我想用 $id 设置这个表单中一个字段的值。 我可以在此 Action for Example 中执行此操作,例如 $form->setValue('productid',$id) 吗?

这是我的 AssessmentType 类:

..../**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options) 
$builder
    ->add('stars', 'choice', array('choices' => array('1' => '1 star', '2' => '2 stars', '3' => '3 stars', '4' => '4 stars', '5' => '5 stars')))
    ->add('comment')
    ->add('productid')
;
....

【问题讨论】:

Related? 不,这是另一个问题,但同一个项目 【参考方案1】:

如果productid 字段是entity 类型,那么您必须将实体对象作为该字段的数据而不是其ID。

所以您的操作应该如下所示:

/**
 * @Route("/product/id.html")
 * @Template()
 */
public function indexAction($id) 
    $angebot = $this->loadAngebot($id);
    $assessment = new Assessment();
    $assessment->setProduct(angebot);  // method that sets `productid` value

    $form = $this->createForm(new AssessmentType(), $assessment);

    return array(
        'bewertungform' => $form->createView(),
        'angebot' => $angebot
    );

【讨论】:

谢谢kibao!我通过在我的 AssesmentType 类中这样做来解决它:受保护的 $angebotid;公共函数 __construct(array $id = null) $this->productid = $id['id']; 然后 ->add('productid', 'text', array( 'label' => 'productid', 'data' => $this->productid ))

以上是关于Symfony2:创建表单时如何设置表单域的值的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 独立表单组件 v2.3 - 设置表单

如何在 symfony2 中进行编辑功能

Symfony2 - 重载注册表单导致 CSRF 错误(添加 github repo)

Symfony 2 在使用没有类的表单时添加 CSRF 令牌

带有可填写表单域的 PDF +“另存为”=带有固定文本的 PDF - 如何?

Java 创建填充PDF表单域