【问题标题】:Symfony2: Create form binded to an entity with a field which is not a propertySymfony:使用不是属性的字段创建绑定到实体的表单
【发布时间】:2012-10-31 22:39:16
【问题描述】:

我的以下(简单)问题:

  $user = new User();
  $user->setEventid(2);
  $user->setT(new \DateTime('now'));

  $em = $this->getDoctrine()->getManager();
  $em->persist($user);
  $em->flush();

  $form = $this->createFormBuilder($user)
    ->add('email', 'email')
    ->add('terms', 'checkbox', array(
          'label'     => 'Read terms?',
          'required'  => true))
    ->getForm();

这是我的代码。电子邮件是用户的财产,条款不是。 我希望他们的用户保存他们的电子邮件并检查条款复选框,但我只需要保存电子邮件,而不是如果他们选中该框 - 如果他们不选中,他们就无法提交表单。

你知道我的意思吗?我确信实现这一点非常简单;)

第二个问题:如何为渲染的 from-tag 赋予 id-attribute 以便在 jquery 中进一步处理?

【问题讨论】:

    标签: forms symfony doctrine


    【解决方案1】:

    要将实体中不存在的字段添加到表单中,请使用以下命令:

    ->add('terms', 'checkbox', array(
        'label'         => 'Read terms?',
        'required'      => true,
        'mapped'        => false, // this works since Symfony 2.1
        'property_path' => false, // this works since Symfony 2.0
    ))
    

    Symfony 为每个表单元素生成一个 ID;只需打开呈现的页面源并查看所需元素的 ID。

    【讨论】:

    • 太棒了,谢谢!关于ID-“问题”:我的表单和元素都没有ID-我认为我可以为具有'attr'属性的元素实现ID-但我如何才能为表单本身实现它??
    • 只需将id 属性添加到您输出的form 标签——Symfony 不会为您输出该标签。
    【解决方案2】:

    如果您的实体中没有“条款”字段,则不会保存。 对于您的第二个问题,将 id 设置为 twig 中的表单非常简单,只需简单:

    {{ form_label(form.name, 'Your Name', { 'attr': {'id': 'foo'} }) }}
    

    【讨论】:

    • 恐怕你得像个初学者一样跟我说话。如果我的实体中没有 terms 字段,它不会被保存,好的,但我不想保存它,如上所述。问题是,它必须是创建这样一个表单的属性,因为我已经将用户对象绑定到它。 (请告诉我另一种创建更灵活表单的方法)第二:完全相同,我不知道如何创建具有自定义表单字段的表单,正如您在我上面的代码中看到的那样,我自动创建它用户对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    相关资源
    最近更新 更多