【问题标题】:Setting a field after binding a form in Symfony 2在 Symfony 2 中绑定表单后设置字段
【发布时间】:2012-04-11 03:14:01
【问题描述】:

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

我希望从注册模型中读取plainPassword,对其进行哈希处理并将其设置为用户文档。这是为了在散列之前验证最大/最小长度。

问题是,当我绑定表单时,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());
}

}

【问题讨论】:

    标签: forms validation symfony


    【解决方案1】:

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

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

      顺便说一句,您在删除约束后遇到的错误不是由您删除它的事实引起的,而是由其他原因引起的。

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

    【讨论】:

    • 感谢 elnur,我在阅读框架的安全文档和验证文档时采用了更简单的方法(删除了 NotBlank)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多