我正在使用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 is
和password 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>";
}
}
我不知道这是如何起作用的?考虑到这些领域没有验证?
有什么想法?我能想到的可能是我的服务器配置中有一些奇怪的设置?
由于
答案 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>";
}