0

これが私のコードです:

  $form = $this->createFormBuilder($signupAttempt)
     ->add('email', 'text', array("label" => "your email:"))
     ->add('password', 'password', array("label" => "your password:"))
     ->add('passwordRepeat', 'password', array("label" => "repeat password:"))
     ->getForm();


  if ($request->isMethod('POST')) {
     $form->bindRequest($request);
     $attempt = $form->getData();
     $this->changeSomeAttributesOfSignupAttempt($attempt); // this does not work
     if ($form->isValid()) { // this is not taking into account the modification made inside changeSomeAttributesOfSignupAttempt
        return new Response("data provided are valid - u signiged up!");
     }
  }

私の問題を参照してください。エンティティにいくつかの変更を加えて、フォームがそのような変更を認識することを期待しています。残念ながら、私が行った変更は認識されていないようです。その結果、クラス SignupAttempt の validaition.xml で定義されたルールが満たされていません。

エンティティSignupAttemptのvalidation.xmlは次のとおりです。

  <getter property="emailInUseAlready">
     <constraint name="False">
        <option name="message">signup_attempt.whole.email_in_use</option>
     </constraint>
  </getter>

そしてエンティティクラス自体:

class SignupAttempt {

   protected $id = null;
   protected $email = null;
   protected $password = null;
   protected $passwordRepeat = null;
   protected $emailInUseAlredy = true;

   public function __construct($email = null, $password = null, $passwordReapeat = null) {
      $this->email = $email;
      $this->password = $password;
      $this->passwordRepeat = $passwordReapeat;
   }

   public function getId() {
      return $this->id;
   }

   public function setId($id) {
      $this->id = $id;
   }

   public function getEmail() {
      return $this->email;
   }

   public function setEmail($email) {
      $this->email = $email;
   }

   public function getPassword() {
      return $this->password;
   }

   public function setPassword($password) {
      $this->password = $password;
   }

   public function getPasswordRepeat() {
      return $this->passwordRepeat;
   }

   public function setPasswordRepeat($passwordRepeat) {
      $this->passwordRepeat = $passwordRepeat;
   }

   public function setEmailInUseAlready($bool) {
      $this->emailInUseAlredy = $bool;
   }

   public function isEmailInUseAlready() {
      return $this->emailInUseAlredy;
   }

   public function isSecondPasswordMatching() {
      return $this->password === $this->passwordRepeat;
   }

   public function import(array $data) {
      throw new \RuntimeException("implement this");
   }
}

何か案が?

4

1 に答える 1

0

を実行する$form->isValid()と、返される (ブール値) 値は、実際にはリクエストがフォームにバインドされた時点で事前評価されます。

その結果、によって返されるエンティティの値を変更しても$form->getData()、検証は事前に行われ、エンティティ オブジェクトが最初に作成されたときに保持される初期値に対して行われるため、まったく役に立ちません。

于 2012-12-08T14:16:02.577 に答える