Zend Form getValue. Нужен кто-то, чтобы объяснить? - PullRequest
2 голосов
/ 18 июня 2011

Я просто работаю с Zend_Form в Zend Framework и наткнулся на что-то довольно странное.

У меня в логине есть следующее действие

$form = new Application_Model_FormLogin();

if ($this->getRequest()->isPost()) {

      $email = $form->getValue('email');
      $pswd = $form->getValue('pswd');

      echo "<p>Your e-mail is {$email}, and password is {$pswd}</p>";

}

Который при отправке только выводит

Your e-mail is и password is

Итак, я проверил, что происходит с print_r,

print_r ($ форм-> GetValues ​​()); print_r ($ _ POST);

Который отображал следующее,

Array ([электронная почта] => [pswd] =>) Array ([электронная почта] => asd [pswd] => asd [submit] => логин)

Таким образом, массив значений форм имеет как нулевые значения, так и глобальный почтовый массив имеет правильные значения. Теперь я не могу решить проблему?

Теперь мне удалось решить проблему, но мне нужна помощь, чтобы понять, почему это работает? Все, что я сделал, это изменил loginAction на это.

$form = new Application_Model_FormLogin();

if ($this->getRequest()->isPost()) {


        //Added this in
        if ($form->isValid($this->_request->getPost())) {

            $email = $form->getValue('email');
            $pswd = $form->getValue('pswd');

            echo "<p>Your e-mail is {$email}, and password is {$pswd}</p>";

        }

}

Я не понимаю, как это заставило это работать? Учитывая, что в полях нет проверки?

Есть мысли? Все, что я могу думать, может быть, у меня есть что-то странное в конфигурации моего сервера?

Спасибо

Ответы [ 2 ]

1 голос
/ 23 апреля 2012

isValid () - это то, что фактически заполняет поля в вашем объекте формы, до тех пор, пока вы не сделаете так, чтобы значения еще не существовали в вашем объекте формы.

изменение исходного кода было бы так же просто, как это

if ($this->getRequest()->isPost()) {

  //your $form object has none of your POSTed values
  $form->isValid($this->getRequest()->getPost())

  //now your form object has the POSTed values and you can access them
  $email = $form->getValue('email');
  $pswd  = $form->getValue('pswd');

  echo "<p>Your e-mail is {$email}, and password is {$pswd}</p>";

}

Это очень легко скользит по нему http://framework.zend.com/manual/1.11/en/zend.form.quickstart.html#zend.form.quickstart.validate

Также рассмотрите этот пример, и он может иметь больше смысла.Здесь вы просто получаете значения из POST.

    if ($this->getRequest()->isPost()) {          

      $email    = $this->getRequest()->getPost('email');
      $password = $this->getRequest()->getPost('password');

      echo "<p> Your email is $email and your password is $password </p>";

    }
1 голос
/ 18 июня 2011

Вы не загрузили значения в объект формы.

Обычно вы проверяете, является ли форма действительной, и для этого загружаете ее с данными публикации, на следующем шаге вы можете использовать getValue (), чтобы получить (отфильтрованное) значение из формы.

if($this->getRequest()->isPost()) {
    $form = new My_Form();
    if($form->isValid($this->getRequest()->getPost())){
        echo $form->getValue('fieldname');        
    }
}
...