[英]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.