【问题标题】:Symfony2 uniqueEntity validation of multiple fields doesn't work with SonataAdminBundle多个字段的 Symfony2 uniqueEntity 验证不适用于 SonataAdminBundle
【发布时间】:2015-09-13 16:01:44
【问题描述】:

我尝试使用 SonataAdminBundle,但 @UniqueEntity 注释不起作用。

这是我的实体:

/**
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="AppBundle\Entity\FooRepository")
 * @UniqueEntity(
 *     fields={"name", "public", "user"},
 *     errorPath="name",
 *     message="This name is already in use."
 * )
 *
 */
class Foo
{
    //...
}

我的前端中的 uniqueEntity 验证工作正常!但是 SonataAdmin 忽略了 Annoation。

我试过了:

assert unique validation in sonata admin

但它也不起作用。

有什么想法吗?

【问题讨论】:

    标签: validation symfony sonata-admin


    【解决方案1】:

    您可能还需要在奏鸣曲管理员中启用cascade validation

    class FooAdmin extends Admin  
    {    
        protected $formOptions = array(
            'cascade_validation' => true        
        );
    }
    

    【讨论】:

      【解决方案2】:

      我找到了解决方案。用户必须在验证前设置!我已经注入了 security.token_storage 服务并覆盖了我的类 Admin 中的 getNewInstance 函数。

      service.yml

      sonata.admin.foo:
          class: AppBundle\Admin\FooAdmin
          tags:
              - { name: sonata.admin, manager_type: orm, group: "Content", label: "Foo" }
          arguments:
              - ~
              - AppBundle\Entity\Foo
              - ~
          calls:
              - [ setTranslationDomain, [AppBundle] ]
              - [ setSecurityTokenStorage, [@security.token_storage] ]
      

      FooAdmin

      class FooAdmin extends Admin
      {
          /**
           * @var UserInterface
           */
          private $user;
      
          public function setSecurityTokenStorage(TokenStorage $tokenStorage)
          {
              $token = $tokenStorage->getToken();
      
              if (null !== $token) {
                  $user = $token->getUser();
      
                  if (is_object($user) && $user instanceof UserInterface) {
                      $this->user = $user;
                  } else {
                      throw new \Exception();
                  }
              }
          }
      
          public function getNewInstance()
          {
              $object = new Foo();
              $object->setUser($this->user);
      
              return $object;
          }
      
          // ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-24
        • 2020-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        相关资源
        最近更新 更多