Zend Form getValue。需要有人解释一下吗?

时间:2011-06-18 11:25:59

标签: zend-form

我正在使用Zend Framework中的Zend_Form并遇到一些非常奇怪的事情。

我的loginAction中有以下内容

$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 ispassword is

所以我检查了print_r发生了什么,

  

的print_r($形式 - &GT;的GetValues());   的print_r($ _ POST);

其中显示以下内容,

  

数组([email] =&gt; [pswd] =&gt;)数组([email] =&gt; asd [pswd] =&gt; asd [提交] =&gt;登录)

因此,窗体值数组的值都为null,而全局post数组的值正确。现在我无法解决这个问题?

现在我确实设法解决了这个问题,但我需要帮助理解为什么这有效?我所做的只是将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 个答案:

答案 0 :(得分:1)

您没有在表单对象中加载值。

Normaly你检查表单是否有效,并且对于这个加载它与post数据,在下一步中你可以使用getValue()从表单中获取(过滤的)值。

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

答案 1 :(得分:1)

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>";

    }