sonata_type_collection不会在我的实体中调用setCollection()方法

时间:2014-06-25 16:06:04

标签: symfony collections doctrine-orm sonata-admin

我有2个实体。用户和地址。用户有很多地址。我想在我的用户创建表单中实现sonata_type_collection字段。

我已将reference_by设置为false,在我的User实体中创建了相应的方法。 它是UserAdminClass中的formtype

        ->add('addresses', 'sonata_type_collection', array(
                // Prevents the "Delete" option from being displayed
                'type_options' => array('delete' => false, 'by_reference' => false)
            ), array(
                'edit' => 'inline',
                'inline' => 'table',
                'sortable' => 'sortable',
            ))

这是我在User实体中的方法:

    public function setAddresses($addresses)
    {
    $this->addresses->clear();

    foreach ($addresses as $address) {
        $this->addAddress($address);
    }
}

public function getAddresses()
{
    return $this->addresses;
}

/**
 * Add addresses
 * вызывается при нажатии на кнопку "добавить новый" в сонате на коллекции
 * @param \Application\Sonata\UserBundle\Entity\Address $addresses
 * @return User
 */
public function addAddress(\Application\Sonata\UserBundle\Entity\Address $addresses)
{
    $addresses->setUser($this);
    $this->addresses[] = $addresses;

    return $this;
}

/**
 * Remove addresses
 *
 * @param \Application\Sonata\UserBundle\Entity\Address $addresses
 */
public function removeAddress(\Application\Sonata\UserBundle\Entity\Address $addresses)
{
    $this->addresses->removeElement($addresses);

}

但是当我提交表单时,它会对现有的链接地址进行公布。我无法删除地址,并且在没有地址时无法添加新地址。

我发现,在表单提交时,方法setAddresses必须被调用,但它还没有,所以我的地址集合并不是每次都清楚,它会使得dublicates。 (我希望我明白这一点。)

我使用symfony 2.5和最新的奏鸣曲。 我已经阅读了所有google和stackoverflow,但是在2012年发布了相同的问题。

0 个答案:

没有答案