Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 在Sonata Admin中断言唯一验证_Validation_Symfony_Unique_Sonata Admin - Fatal编程技术网

Validation 在Sonata Admin中断言唯一验证

Validation 在Sonata Admin中断言唯一验证,validation,symfony,unique,sonata-admin,Validation,Symfony,Unique,Sonata Admin,我正在使用Symfony 2.1进行一个项目。我使用SonatAdminBundle进行管理。 我想在我的admin类的slug属性中添加一个断言。。我该怎么做 在我的实体中,我设置了断言,但在这里似乎不起作用:( 相关代码: 实体: /* * @ORM\Table(name="default_doctor_specialty") * @UniqueEntity("uniqueSlugName") * @ORM\Entity */ class Test { //.. /**

我正在使用Symfony 2.1进行一个项目。我使用SonatAdminBundle进行管理。 我想在我的admin类的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'
);
 //...
  }
为什么默认验证不起作用

&即使不能像这样工作,我如何在admin类中设置唯一的验证


感谢您的回答:)

最后,我为我的实体定义了一个验证组:

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

从这个

这是完整的例子,它取决于你的交响乐和奏鸣曲版本

// 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']]));
    }
}

感谢Parisssss,因为我在sonata中找到了唯一验证的解决方案,但我无法适应这种类型的验证,但使用您的代码,我已经解决了我的问题。这是一个更好的解决方案,无需更改实体类。validate方法已被弃用。现在应该使用自定义约束,并使用管理员的formOptions属性将它们添加到表单中。