簡體   English   中英

自定義Sonata管理員類中的Symfony2 @UniqueEntity

[英]Symfony2 @UniqueEntity in custom Sonata Admin Class

這是我的實體示例代碼。

EntityOne.php

//....
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
//....

/**
 * EntityOne
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="AppBundle\Entity\EntityOneRepository")
 * @UniqueEntity(
 *     fields={"entityTwo", "number"},
 *     errorPath="number",
 *     message="A entityTwo with this number already exists."
 * )
 */
class EntityOne
{

    //....

    /**
     * @ORM\ManyToOne(targetEntity="EntityTwo", inversedBy="entityOne")
     * @ORM\JoinColumn(name="entitytwo_id", referencedColumnName="id")
     */
    protected $entityTwo;

    /**
     * @var integer
     *
     * @ORM\Column(name="number", type="integer")
     * 
     * @Assert\NotBlank()
     */
    private $number;

    //....

}

EntityTwo.php

/**
 * EntityTwo
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="AppBundle\Entity\EntityTwoRepository")
 */
class EntityTwo
{

    //....

    /**
     * 
     * @ORM\OneToMany(targetEntity="EntityOne", mappedBy="entityTwo", cascade={"persist"}, orphanRemoval=true)
     * @ORM\OrderBy({"number" = "ASC"})
     */
    protected $entityOne;

    /**
     * @var integer
     *
     * @ORM\Column(name="totals", type="integer")
     * 
     * @Assert\NotBlank()
     */
    private $totals;

    //....

}

我在實體的常規管理類中使用SonataAdminBundle,一切正常。

@UniqueEntity的問題在另一個地方。 在另一個管理類中,創建一個記錄數EntityOne,該記錄數取決於EntityOne中字段的值。

為此,我這樣做如下:

EntityTwoAdmin.php

class EntityTwoAdmin extends Admin {

    //....

    protected $formOptions = array(
        'cascade_validation' => true        
    );

    //....

    public function preUpdate($entityTwo) {

        $numTotals = $entityTwo->getTotals();
        $numEntityOneExist = $entityTwo->getEntityOne()->count();

        for ($i = $numEntityOneExist; $i <= $numTotals; $i++) {

            $entityOneNew = new \AppBundle\Entity\EntityOne;

            $entityOneNew->setNumber($i);

            $entityTwo->addEntityOne($entityOneNew);
        }

    }
}

在這里創建記錄時不考慮約束驗證。

我不知道自己可能會缺少什么,但是當然我需要解決一些問題。

有任何想法嗎?

我設法解決它,我不清楚這是最好的方法還是不遵循symfony的最佳實踐。

我在這里分享給那些可以幫助的人:

EntityTwoAdmin.php

public function preUpdate($entityTwo) {

    $numTotals = $entityTwo->getTotals();
    $numEntityOneExist = $entityTwo->getEntityOne()->count();

    for ($i = $numEntityOneExist; $i <= $numTotals; $i++) {

        $entityOneNew = new \AppBundle\Entity\EntityOne;
        $entityOneNew->setNumber($i);
        $entityOneNew->setEntityTwo($entityTwo);

        $validator = $this->getConfigurationPool()->getContainer()->get('validator');
        $errors = $validator->validate($entityOneNew);

        if (count($errors) == 0) {

            $entityTwo->addEntityOne($entityOneNew);

        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM