2012-04-11 36 views
0

我在symfony2中做了一個簡單的註冊表單。我創建了一個帶有plainPassword字段和嵌入式用戶文檔(我使用mongoDB)和兩個FormType的Register模型。用戶文檔在密碼字段中具有NotBlank約束。在Symfony 2中綁定表單後設置字段

我希望從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()); 
} 

} 

回答

2

有解決這個問題至少有兩種方式:

  • password場取下NotBlank約束。這裏的推理是你不要讓用戶設置他們的編碼密碼,因此你並不需要驗證它。

    順便說一句,你刪除約束後得到的錯誤不是由於你刪除它,而是由其他東西造成的。

  • 使用validation groups如果您仍想驗證password字段(例如service layer),請創建驗證組,並排除您用於註冊的組中password字段的約束。

+0

謝謝elnur,我以更簡單的方式(刪除NotBlank),而我閱讀框架的安全文檔和驗證文檔。 – adrianmoya 2012-04-14 14:35:04

相關問題