Symfony - 禁用控制器的特定字段验证

时间:2015-12-14 10:33:40

标签: symfony

我使用的是Symfony 2.7.6。我创建了一个名为employee的实体,它的交互式表单是使用doctrine crud生成器生成的。实体具有以下字段

 1. id
 2. firstname
 3. lastname
 4. email
 5. username
 6. password

验证正在按预期从所有字段的用户注册表单开始。

问题:我创建了一个登录表单,我想取消对字段firstname,lastname和email的验证,并将这些元素排除在我的页面上呈现

我已经修改了我的控制器来渲染我的表单

$entity = $em->getRepository('XXXEmployeeBundle:Employee');
    $form = $this->createForm(new \XXX\EmployeeBundle\Form\EmployeeType(), $entity, array(
                'action' => $this->generateUrl('user_login'),
                'method' => 'POST',
            ));
            $form->add('submit', 'submit', array('label' => 'Update'));
            $form->remove('firstname');
    $form->remove('lastname');
    $form->remove('email');
            $form->handleRequest($request);

当from从表单中排除字段时,这可以正常工作。但我的$ form-> isvalid()返回false。由于我使用$ form-> getErrorsAsString()方法打印错误,其显示如下:

firstname:ERROR:名字不能为空。姓氏:错误:姓氏代码不能为空。 employeeFirstName:错误:员工名字不能为空。电子邮件:错误:电子邮件不能为空。

这是实现此功能的正确方法吗?请帮我解决这个问题。感谢

2 个答案:

答案 0 :(得分:0)

在您的实体中,您可以像这样使用nullable = true

 /**
 * @ORM\Column(type="string", nullable=true)
 *
 * @var string
 */
protected $nombre;

告诉可以为空的教条,后端/前端都不检查该值。

问候!

答案 1 :(得分:0)

我认为逻辑问题。

  1. 创建注册表单时 - 您要创建并保存新表单 实体。
  2. 当您创建登录表单时 - 您想要比较登录和 表格和实体之间的密码。
  3. 因此。您应该为登录创建特殊表单类(而不是从注册),并且不要设置数据启发(createForm函数中的第二个参数)

    并且,请检查控制器操作中是否有相同的表单对象来处理此表单。