私はsymfony2で簡単な登録フォームを練習しています。私は、plainPassword フィールドと埋め込まれた User ドキュメント (私は mongoDB を使用しています) と 2 つの FormTypes を持つ Register モデルを作成しました。ユーザー ドキュメントには、パスワード フィールドに 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());
}
}