Zend Honeypot验证
在我的引导程序上,我没有一个类,它是一个简单的php文件:
On my bootstrap I don't have a class, it's a simple php file:
我在此处添加了
$loader = Zend_Loader_Autoloader::getInstance ();
$loader->setFallbackAutoloader ( true );
$loader->suppressNotFoundWarnings ( false );
//resource Loader
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH,
'namespace' => '',
));
$resourceLoader->addResourceType('validate', 'validators/', 'My_Validate_');
$loader->pushAutoloader($resourceLoader);
然后,在应用程序/验证器中,我拥有:
Then, in application/validators I have:
class My_Validate_Spam extends Zend_Validate_Abstract {
const SPAM = 'spam';
protected $_messageTemplates = array(
self::SPAM => "Spammer"
);
public function isValid($value, $context=null)
{
$value = (string)$value;
$this->_setValue($value);
if(is_string($value) and $value == ''){
return true;
}
$this->_error(self::SPAM);
return false;
}
}
在我的表单构造函数中,我有:
In my form constructor I have:
$this->addElement(
'text',
'honeypot',
array(
'label' => 'Honeypot',
'required' => false,
'class' => 'honeypot',
'decorators' => array('ViewHelper'),
'validators' => array(
array(
'validator' => 'Spam'
)
)
)
);
最后我认为:
<dt><label for="honeypot">Honeypot Test:</label></dt>
<dd><?php echo $this->form->honeypot;?></dd>
尽管如此,我还是通过填充或不填充该文本字段来接收表单数据. 我在这里想念什么?
Despite all this, I receive my form data, either by filling or not filling that text field. What am I missing here ?
非常感谢.
那是预期的行为. $ honeypot是一个表单元素.现在,假设您有一个表单$ hp_form,其中$ honeypot是分配的元素之一.
Thats expected behaviour. $honeypot is a form-element. Now, let's say you have a form $hp_form where $honeypot is one of the elements assigned.
现在,在您的控制器中只需使用类似以下内容的
Now, in your controller simply use something like:
if ($hp_form->isValid($this->getRequest()->getPost())) {
// do something meaningful with your data here
}
也许您还想检查一下,是否是第一次显示该表单,或者用户是否已提交该表单:
Probably you also want to check, if you display the form for the first time or if the user submitted the form:
if ($this->getRequest()->isPost() &&
false !== $this->getRequest()->getPost('submit_button', false)) {
if ($hp_form->isValid($this->getRequest()->getPost())) {
// do something meaningful with your data here
}
}
...假设您的提交按钮的ID为"submit_button".
...assuming that your submit button has the id 'submit_button'.
希望这会有所帮助
再见, 基督徒
Bye, Christian