【发布时间】:2018-08-05 22:25:18
【问题描述】:
表单类型:
class BranchFormType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('name');
}
public function getName() {
return 'branch';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'My\MainBundle\Entity\Branch',
));
}
}
在实体定义中:
<field name="name" column="name" type="string" length="255"/>
没有 nullable=true 并且该字段在呈现时具有必需的属性。
验证.yml:
My\MainBundle\Entity\Branch:
properties:
name:
- NotBlank: ~
symfony 是自动找到这个文件还是我必须包含在某个地方?文档只是声明表单自动使用验证服务。
控制器:
$branch = new Branch();
$form = $this->createForm(new BranchFormType(), $branch);
if ($request->isMethod('POST')) {
$form->bindRequest($request);
if ($form->isValid()) {
$em->persist($branch);
$em->flush();
return $this->redirect($this->generateUrl('view_branch'));
}
}
return $this->render('MyMainBundle:Branch:create.html.twig', array(
'form' => $form->createView()
));
提交时出现以下错误:
SQLSTATE[23000]:违反完整性约束:1048 列“名称” 不能为空
因此,尽管 name 为空,但 isValid 返回 true 并继续使用空值保存实体。名称为空时,isValid如何返回true? ORM定义说nullable=false?`有什么想法吗?我没有定义额外的验证器。我用的是sf2.1
【问题讨论】:
-
nullable=false是一个 Doctrine 约束,isValid不执行 Doctrine 方面的检查(Doctrine 不知道如何验证实体),它只检查断言(NotBlank...)来自 Validator 组件。 -
我猜可能存在级联持续存在的问题。假设您的分支实体与另一个具有“名称”字段的实体(具有级联持久性)有关系。在您的情况下,如果您为 Branch 实体中的“名称”字段设置值但未在相关实体中设置“名称”字段,您将遇到与您描述的相同的错误。那么你能确保你的关系不会导致这个错误吗?如果您发布分支实体定义,我可能会说更多
-
你可能是对的,在 sf 工具栏中有一个实体错误,例如“children 指的是不存在的拥有侧字段 Kloppe\SmsBundle\Entity\User#user。”这是实体定义dpaste.com/879513
-
我认为你需要
required=true形式 -
您的分支定义是否定义了
getBranch()和setBranch()方法?
标签: symfony symfony-2.1 symfony-forms