[英]Assert unique validation in Sonata Admin
我正在使用Symfony 2.1进行项目。 我使用SonataAdminBundle进行管理。 我想在我的管理类中向我的slug属性添加一个断言..我该怎么做?
在我的实体中,我设置了断言,但似乎它在这里不起作用:(
相关代码:实体:
/*
* @ORM\Table(name="default_doctor_specialty")
* @UniqueEntity("uniqueSlugName")
* @ORM\Entity
*/
class Test {
//..
/**
* @var string
* @Gedmo\Slug(fields={"name"},unique=false)
*
* @ORM\Column(name="unique_slug_name", type="string", length=255, nullable=false , unique=true)
*/
private $uniqueSlugName;
}
在管理员类:
class TestAdmin extends Admin {
protected $formOptions = array(
'validation_groups' => 'Default'
);
//...
}
为什么默认验证不起作用???
即使不能像这样工作,如何在管理类中设置唯一的验证?
谢谢你的答案:)
最后我为我的实体定义了一个验证组:
use Symfony\Bridge\Doctrine\Validator\Constraints as DoctrineAssert;
/*
* @ORM\Table(name="default_doctor_specialty")
* @DoctrineAssert\UniqueEntity(fields="uniqueSlugName", message="A Speciality with same slug already exists", groups={"test"})
* @ORM\Entity
*/
class Test {
//..
/**
* @var string
* @Gedmo\Slug(fields={"name"},unique=false)
*
* @ORM\Column(name="unique_slug_name", type="string", length=255, nullable=false , unique=true)
*/
private $uniqueSlugName;
}
在管理类中,我使用了测试验证组而不是默认值!
感谢github上的AHWEBDEV
!
从这个链接
这是完整的例子,它取决于你的symfony和奏鸣曲版本。
// src/AppBundle/Entity/Service.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @UniqueEntity(
* fields={"host", "port"},
* errorPath="port",
* message="This port is already in use on that host."
* )
*/
class Service
{
/**
* @ORM\ManyToOne(targetEntity="Host")
*/
public $host;
/**
* @ORM\Column(type="integer")
*/
public $port;
}
我不喜欢用数百行这样的低级细节来验证我的实体。 可以在Admin类中定义验证规则。 通常,管理员的验证规则与客户端的验证规则不同。
final class TestAdmin
{
// … skipped for brevity
public function validate(ErrorElement $errorElement, $object)
{
$errorElement->addConstraint(new UniqueEntity(['fields' => ['slug']]));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.