使用ZF2表单注释和doctrine2注释时遇到了问题。
我有两个实体:运动和元素,以及这两个实体之间的一对多关系(一个运动有很多元素)。
所以在运动实体类中我有这个注释:
/**
* @ORM\OneToMany(targetEntity="Application\Entity\CcMovementElement", mappedBy="movement", cascade={"persist"})
*
* @ComposedObject({ "target_object":"Application\Entity\CcMovementElement", "is_collection":"false", "options":{"count":1, "should_create_template":true, "allow_add" : true}})
* @Form\Attributes({"class":"movement-element"})
*/
private $elements;
然后在元素实体Class i中有这个注释:
/**
* @var \Application\Entity\CcMovement
*
* @ORM\ManyToOne(targetEntity="Application\Entity\CcMovement", inversedBy="elements")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="movement", referencedColumnName="id", onDelete="CASCADE")
* })
* @Form\Attributes({"type":"hidden"})
* @Form\Filter({"name": "Int"})
*/
然后我在控制器中构建表单,如下所示:
$entity = new CcMovement();
$builder = new AnnotationBuilder($this->getEntityManager());
$form = $builder->createForm($entity);
$form->setHydrator(new DoctrineHydrator($this->getEntityManager(), get_class($entity)));
$form->bind($entity);
表单生成就像我想要的那样。
当我提交表单时,我在控制器中使用此代码
$entity = new CcMovement();
$builder = new AnnotationBuilder($this->getEntityManager());
$form = $builder->createForm($entity);
$form->setHydrator(new DoctrineHydrator($this->getEntityManager(), get_class($entity)));
$form->bind($entity);
$form->setData($posts);
if ($form->isValid()) {
.... Action if valid
} else {
... Action if error
}
当我创建新元素时,表单[elements] [0] [移动]未设置,这是正常的。使用此代码可以正常工作,当有效时我会持久化实体。
现在,我不想对Element fieldset进行一些更改,所以我创建了一个扩展Zend \ Form \ Fieldset的类ElementFieldset,我修改了Element Entity Class Annotation,如下所示:
/**
* CcMovementElement
*
* @ORM\Table(name="cc_movement_element", indexes={@ORM\Index(name="fk_element_movement", columns={"movement"})})
* @ORM\Entity(repositoryClass="Application\Repository\CcMovementElementRepository")
* @Form\Type("Application\Form\ElementFieldset")
* @Form\Name("movement_element")
*/
class CcMovementElement
{
但是当我这样做时,$ form-> isValid失败,因为NotEmpty验证器被应用于[元素] [i] [移动]。 我只在Element Entity中添加Annotation Form / Type,而ElementFieldSet只是在没有任何方法的情况下扩展Zend \ Form \ Fieldset。
我不明白是什么意思......
感谢您的帮助