简体   繁体   English

在Sonata Admin中断言唯一验证

[英]Assert unique validation in Sonata Admin

I'm using Symfony 2.1 for a project. 我正在使用Symfony 2.1进行项目。 I use SonataAdminBundle for administration usage. 我使用SonataAdminBundle进行管理。 i want to add an assert to my slug property in my admin class.. how can i do this? 我想在我的管理类中向我的slug属性添加一个断言..我该怎么做?

in my entity i had set the assertion but it seems that it doesn't work here :( 在我的实体中,我设置了断言,但似乎它在这里不起作用:(

related codes: the entity : 相关代码:实体:

/*
 * @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;
}

in admin class: 在管理员类:

class TestAdmin extends Admin {

protected $formOptions = array(
    'validation_groups' => 'Default'
);
 //...
  }

why the default validation doesn't work??? 为什么默认验证不起作用???

& even if doesn't work like this how can i set the unique validation inside admin class ??? 即使不能像这样工作,如何在管理类中设置唯一的验证?

thanks for your answers :) 谢谢你的答案:)

finally i defined a validation group for my entity: 最后我为我的实体定义了一个验证组:

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;
}

and in admin class i used test validation group instead of default! 在管理类中,我使用了测试验证组而不是默认值!

thanks to AHWEBDEV on github! 感谢github上的AHWEBDEV

From this link 从这个链接

This is the full exemple , it depend on your symfony and sonata version. 这是完整的例子,它取决于你的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;
}

I prefer not to mess my entities with hundreds of lines of such low level details like validation. 我不喜欢用数百行这样的低级细节来验证我的实体。 One can define validation rules inside the Admin class. 可以在Admin类中定义验证规则。 Usually the validation rules are different for admins than for clients as well. 通常,管理员的验证规则与客户端的验证规则不同。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM