繁体   English   中英

实体字段Symfony2上的约束NotBlank / NotNull

[英]Constraint NotBlank/NotNull on Entity field Symfony2

我有一个用户实体。 每个用户可以属于一个域。

class User extends BaseUser implements DomainableInterface
{
    …

    /**
    * @var Domain
    *
    * @ORM\ManyToOne(targetEntity="Domain", inversedBy="users")
    * @ORM\JoinColumns({
    *   @ORM\JoinColumn(name="domain_id", referencedColumnName="id")
    * })
    */
    private $domain;

    …
}

创建用户时,我希望域是强制性的。 这是表格(这是一个超类,因为许多其他实体将属于一个域),用户表格是从该表格继承的

abstract class HasDomainFormType extends AbstractType
{
    private $user;

    public function __construct($securityContext)
    {
        $this->user = $securityContext->getToken()->getUser();
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $user = $this->user;
        $builder
            ->add('domain', 'entity', array(
                    'class'    => 'AppBundle:Domain',
                    'property' => 'id',
                    'multiple' => false,
                    'query_builder' => function(DomainRepository $er) use ($user) {
                        if (!in_array('ROLE_SUPER_ADMIN', $user->getRoles())) {
                            return $er->createQueryBuilder('d')
                                    ->andWhere('d.id = :domainId')
                                    ->setParameter('domainId', $user->getDomain()->getId());
                        } else {
                            return $er->createQueryBuilder('d');
                        }
                    },
                )
            )
        ;
    }
}

这是validation.xml文件

    <class name="AppBundle\Entity\User">
      <property name="domain">
          <constraint name="NotNull">
              <option name="message">fos_user.domain.blank</option>
              <option name="groups">
                  <value>Update</value>
              </option>
          </constraint>
        </property>
    </class>

当我提交省略域字段的表单(这是Rest API)时,出现此错误:

An exception occurred while executing 'SELECT b0_.id AS id0, b0_.name AS name1, b0_.enabled AS enabled2 FROM bo_domain b0_ WHERE b0_.id IN (?)' with params [""]:
SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for integer: ""

但是,如果我填写domain字段,一切正常。

我不明白为什么。 我想用表格告诉我,“域”字段不能为空。

编辑:我执行该错误时

$form->handleRequest($request);

不在

$form-isValid();

我无法使其正常运行,因此我采取了一种解决方法。

abstract class HasDomainFormType extends AbstractType
{
    private $user;
    private $domainManager;

    public function __construct($securityContext, $domainManager)
    {
        $this->user = $securityContext->getToken()->getUser();
        $this->domainManager = $domainManager;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $user = $this->user;

        $arrchoice = $this->domainManager->getDomainForUser($user);
        $builder
            ->add('domain', 'entity', array(
                    'class'    => 'AppBundle:Domain',
                    'property' => 'id',
                    'multiple' => false,
                    'choices'  => $arrchoice
                )
            )
        ;
    }
}

而不是使用的query_builder选项,我建立表单之前获取我需要与DomainManager所有的选择,我在使用它们choices选项。

感谢@Jovan Perovic,尽管我尚未测试,但我想我知道问题出在哪里。 我正在使用此表单创建用户,所以这是控制器中的行

$form = $this->createForm(new UserFormType(), $user);

我的猜测是, $user的参数变量覆盖$user我在FormType在使用可变query_builder选项。 由于它是新用户,因此没有域。

如果有时间,我将尝试将表单中的$user重命名为$currentUser ,看看是否$currentUser

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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