预填充表单字段

时间:2015-08-14 10:15:51

标签: symfony symfony2-forms

我有一个用户创建表单(在Symfony Form组件之上),它在一些不同的页面上使用,并通过AJAX加载。

初始请求包含我们已经知道的有关用户的信息,例如如果表单是从" X"的经理创建页面加载的公司,我们已经知道用户有一个角色="经理"和公司=" X"。并且必须从表单中删除/隐藏相应的表单字段,并且必须为这些参数提供基础用户对象(必须将角色字段设置为" manager",公司字段必须设置为" ; X"。)

如何实现?

1 个答案:

答案 0 :(得分:2)

根据我的理解,你可以使用这个问题的答案: https://stackoverflow.com/a/18792299/4098335

基本上,在调用createForm()之后,你必须为所需的字段调用setData()。

如果这不起作用,可以尝试覆盖AbstractType类的构造函数。但它有点“hacky”,显然不是最简单的方法......例如:

class YourUserType extends AbstractType
{
    protected $manager;

    public function __construct($manager = null)
    {
        $this->manager = $manager;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        if ($this->manager !== null) {
            $builder
                ->add('manager', 'entity', array(
                        'class' => 'YourBundle:Manager',
                        'data' => $this->manager,
                        'read_only' => true,
                    )
                );
        }
    }
}

然后,在您的控制器中,在实例化YourUserType时传递“manager”实体:

    $form = $this->createForm(new YourUserType($manager), $entity, array(
        'action' => $this->generateUrl('create_url'),
        'method' => 'POST',
    ));

注意:在示例中,我将'read_only'选项设置为true,这样您就可以“避免”用户选择其他值。您可以稍后在前端隐藏字段,但在处理表单请求时仍应检查该值。