symfony2で簡単な登録フォームを実践しています。私はplainPasswordフィールドと埋め込まれたUserドキュメント(mongoDBを使用しています)と2つのFormTypeを持つRegisterモデルを作成しました。ユーザー文書では、パスワードフィールドにNotBlankという制約があります。symfony 2でフォームをバインドした後にフィールドを設定する
plainPasswordをRegisterモデルから読み込み、ハッシュして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());
}
}
ありがとうございましたelnur、私はフレームワークのセキュリティドキュメントと検証ドキュメントを読んでいる間、私は単純な方法(NotBlankを削除)に行きました。 – adrianmoya