【发布时间】:2015-07-23 13:03:24
【问题描述】:
我有一个用户实体。每个用户都可以属于一个域。
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: ""
但如果我填写域字段,一切正常。
我不明白为什么。我希望表单告诉我“域”字段不能为空。
编辑:当我这样做时发生错误
$form->handleRequest($request);
不在
$form-isValid();
【问题讨论】:
-
我的第一个想法是看看为什么
$user->getDomain()->getId()返回""。如果user是认证用户,是否分配了域? -
我找到了另一种方法。我想我找到了问题的原因。我会发布答案
标签: forms symfony entity constraints