Ben*_*Ben 8 doctrine-orm zend-framework2
我想知道的是创建匹配实体的表单的最佳方法.
我看到了一些不同的例子,一些使用@Annotation,另一些使用@Form?有人可以解释一下这个区别吗?
在具有相关/嵌套实体的实体的情况下,我是否需要为每个实体提供自定义水合器?我假设Doctrine可能已经有一个实现水合器接口的东西?
总结: - 从实体创建表单的最佳方式. - @Form和@Annotation之间的区别 - Doctrine是否为其实体提供了Hydrator?
Sam*_*Sam 12
首先:注释是速度杀手.如果要使用注释构建器,请始终缓存创建的对象.但注释也是获取表单运行的最简单方法;)
第二:保湿器.将ZF2 Forms与Doctrine 2结合使用时,您很可能希望使用位于其中的DoctrineEntity Hydrator.请考虑以下代码:
$form = new ReferenzwertForm();
$form->setHydrator(new DoctrineEntity($serviceLocator->get('Doctrine\ORM\EntityManager')))
->setObject(new Referenzwert())
->setInputFilter(new ReferenzwertFilter())
->setAttribute('method', 'post');
return $form;
Run Code Online (Sandbox Code Playgroud)
Zend\Form\Form ObjectDoctrineORMModule\Stdlib\Hydrator\DoctrineEntity
当不使用注释并且您正在引用另一个实体时,请确保使用适当的表单元素(在大多数情况下,这将是一个select元素(比如为BlogEntity选择CategoryEntity或其他东西)
$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
)
));
Run Code Online (Sandbox Code Playgroud)
如您所见,Form元素也需要了解entityManager.这就是为什么理想情况下你想要用另一个setter扩展第一个Code-Example以将entityManager注入到表单对象中.
$form->setEntityManager($serviceLocator->get('Doctrine\ORM\EntityManager'))
->set()//all the other stuff
Run Code Online (Sandbox Code Playgroud)
一般来说最好的方法是什么?我会说没有.出于速度目的,注释仅仅是杀手.使用缓存版本应该有所帮助,尽管我还没有在ZF2中进行缓存的个人经验.我喜欢在注释之外创建我的表单,因为我的IDE支持很多东西,但肯定不会形成注释:D
希望这可以帮助你一点,我没有写出太多的背景:P
| 归档时间: |
|
| 查看次数: |
9722 次 |
| 最近记录: |