[英]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.