如何获得我用来构建此窗体的对象属性:控制器代码
$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组件往往是最复杂的组件之一,所以不要犹豫,更清楚地说明你的问题,这样我可以更有效地帮助你。