在Symfony 2中绑定表单后设置字段

时间:2012-04-11 03:14:02

标签: forms validation symfony

我正在练习在symfony2中做一个简单的注册表单。我创建了一个Register模型,其中包含一个plainPassword字段和一个嵌入式用户文档(我正在使用mongoDB)和两个FormTypes。用户文档在密码字段中具有NotBlank的约束。

我希望从Register模型中读取plainPassword,哈希并将其设置为User文档。这用于在散列之前验证最大/最小长度。

问题是,当我绑定表单时,似乎Symony已经保存了一个错误数组,其中User.password字段为空。所以即使我在绑定后设置散列传递,表单也永远不会有效。我总是收到“这个值不应该是空白的”

最后,从User.password中删除NotBlank约束会导致“您无法在未绑定的表单上调用isValid()”。无论哪种方式,我都不希望删除约束,但我想至少看到它有效。

一些代码:

class RegisterController extends Controller {

/**
 * @Route("/register/", name="register_new")
 * @Template()
 */
public function indexAction(Request $request)
{
    $form = $this->createForm(new RegistrationType(), new Registration());

    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);
        $register = $form->getData();
        $user = $register->getUser();
        $user->setPassword(sha1($register->getPlainPassword()));
        $form->setData($register);
        if ($form->isValid()) {
            return $this->redirect($this->generateUrl('login_form'));
        } 
    }
    return array('form' => $form->createView());
}

}

1 个答案:

答案 0 :(得分:2)

至少有两种方法可以解决这个问题:

  • NotBlank字段中删除password约束。这里的原因是您不允许用户设置其编码密码,因此您不要真的需要验证它。

    顺便说一句,你在删除约束后得到的错误不是因为你删除了它,而是由其它东西引起的。

  • 使用validation groups如果您仍希望能够在其他地方验证password字段 - 例如service layer - 创建验证组并从您用于注册的组中排除password字段的约束。