ZF2&一对多关系的Doctrine2注释

时间:2016-03-08 06:44:14

标签: php forms zend-framework annotations

使用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。

我不明白是什么意思......

感谢您的帮助

0 个答案:

没有答案