我发现Zend“必需”验证器在我的表单中生成的提示比我想要的更早。首次在浏览器中呈现表单时,在用户提交任何内容之前,它会显示“值是必需的,不能为空”。我希望只在提交未通过验证检查的内容后才显示。是否有Zend标准的方法来做到这一点,或者我是否需要编写能够按照我想要的方式使其成为有状态的东西?
我是新手,所以我认为这是非常基本的东西:
以下是表格:
class Application_Form_Login extends Zend_Form
{
public function init()
{
/* Form Elements & Other Definitions Here ... */
$this->setMethod('post');
$this->addElement(
'text', 'username', array(
'label' => 'Username:',
'required' => true,
'filters' => array('StringTrim'),
)
);
$this->addElement('submit', 'submit', array(
'ignore' => true,
'label' => 'Login',
));
}
}
使用此代码显示:
public function indexAction()
{
// action body
$db = $this->_getParam('db');
$loginForm = new Application_Form_Login();
if($loginForm->isValid($_POST)) {
$adapter = new Zend_Auth_Adapter_DbTable(
$db,
'users',
'username',
'password',
);
$adapter->setIdentity($loginForm->getValue('username'));
$adapter->setCredential($loginForm->getValue('password'));
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($adapter);
if ($result->isValid()) {
$this->_helper->FlashMessenger('Successful Login');
$this->redirect('/');
return;
} else {
$this->_helper->FlashMessenger('Unsuccessful Login');
}
}
$this->view->loginForm = $loginForm;
}
答案 0 :(得分:3)
您在第一次显示表单之前正在调用isValid()
,这就是您收到错误的原因。可能$_POST
数组是空的。
尝试仅验证POST请求,即:
if ($this->getRequest()->isPost()) {
if($loginForm->isValid($_POST)) {
...
}
}
希望有所帮助。