我想知道的是创建与实体匹配的表单的最佳方法。
我看到了几个不同的例子,一些使用了“注释”,另一些使用了“表单”?谁能解释一下区别吗?
对于具有相关/嵌套实体的实体,是否需要为每个实体提供自定义的消火器?我假设Doctrine可能已经有了一个实现水龙头接口的方法?
总结:-从实体创建表单的最佳方法。-“形式”和“注释”之间的区别--“原则”是否为其实体设置了“水化器”?
发布于 2012-11-20 21:55:33
首先:注释是一个速度杀手。如果要使用注释生成器,请始终缓存创建的对象。但是注释也是使表单运行的最简单的方法;)
第二:水化器。当将ZF2窗体与Doctrine 2结合使用时,您最可能希望使用位于内部的DoctrineEntity水化器。考虑以下代码:
$form = new ReferenzwertForm();
$form->setHydrator(new DoctrineEntity($serviceLocator->get('Doctrine\ORM\EntityManager')))
->setObject(new Referenzwert())
->setInputFilter(new ReferenzwertFilter())
->setAttribute('method', 'post');
return $form;Zend\Form\Form Object类型的DoctrineORMModule\Stdlib\Hydrator\DoctrineEntity 类型的
当不使用注释并引用另一个实体时,请确保使用适当的表单元素(在大多数情况下,这将是一个select元素(比如为一个CategoryEntity或其他东西选择一个BlogEntity )。
$this->add(array(
'name' => 'type',
'type' => 'DoctrineORMModule\Form\Element\DoctrineEntity',
'options' => array(
'label' => 'Choose a MyEntity',
'object_manager' => $this->getEntityManager(),
'target_class' => 'Namespace\Entity\MyEntity',
'property' => 'name'
),
'attributes' => array(
'required' => true
)
));正如您所看到的,Form元素也需要了解entityManager。这就是为什么理想情况下,您希望用另一个setter扩展第一个代码示例,将entityManager注入到表单对象中。
$form->setEntityManager($serviceLocator->get('Doctrine\ORM\EntityManager'))
->set()//all the other stuff一般说来,最好的方法是什么?我想说根本就没有。就速度而言,注释仅仅是一个杀手。使用缓存版本应该会有帮助,尽管我还没有在ZF2中缓存的个人经验。我喜欢在注释之外手工创建表单,原因很简单,因为我的IDE支持很多东西,但肯定不支持表单注释:D
希望这能对你有所帮助,而且我没有在上下文中写太多东西。
https://stackoverflow.com/questions/13475624
复制相似问题