symfony:获取对象窗体


symfony : get object Forms

如何获得我用来构建此窗体的对象属性:控制器代码

$assistance1 = new Assistance();
$assistance1->setEtudiant($etudiant1);
$form = $this->get('form.factory')->create(new AssistanceType(), $assistance1);

创建Form类的buildform函数

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('present', 'checkbox',array(
            'required'  => false,
        ))
    ;
}

您可以将$this->assistance1;添加到AssistenceType并执行new AssistenceType($assistence1);,但我认为这不是一个好的设计。

class AssistenceType extends AbstractType
{
    private $assistence1;
    public function __construct($assistence1)
    {
        $this->assistence1 = $assistence1;
    }
    public function buidlForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('present', 'checkbox', array(
            'required' => false,
            'label' => $this->assistence1->getEtudiant()
        ));
    }
}

并像这样使用

$form = $this->get('form.factory')->create(new AssistanceType($assistence1), $assistance1);

您应该记住,构建表单是与它的数据解耦的。如果需要根据表单的属性更改表单,则需要实现不同类型的事件侦听器或订阅者。可以这样想:对于许多表单,您只需要一个构建器。

要在表单上实现侦听器或订阅者,最简单的方法可能是首先将表单类型声明为服务,然后注册需要更改表单行为的服务,并将其标记为表单的事件侦听器。这些都在文档中:)

然而,Symfony的Form组件往往是最复杂的组件之一,所以不要犹豫,更清楚地说明你的问题,这样我可以更有效地帮助你。