Php 在zend(1.12)自定义验证器中访问请求obejct合法吗?
我使用的是Php 在zend(1.12)自定义验证器中访问请求obejct合法吗?,php,forms,validation,zend-framework,Php,Forms,Validation,Zend Framework,我使用的是zend framework 1.12。我有一个验证令牌的服务。具有两种功能的服务 setToken:负责在会话中生成令牌和存储 validateToken:负责重新生成令牌,并使用会话中存储的令牌对其进行验证 当前情况是,我在加载表单时调用setToken()函数,并且validateToken()函数将在表单提交后被调用 现在我想写zend自定义验证器。这将完成整个过程 这是我的自定义验证器: class My_Validator_Csrf extends Zend_Validat
zend framework 1.12
。我有一个验证令牌的服务。具有两种功能的服务
setToken
:负责在会话中生成令牌和存储李>
validateToken
:负责重新生成令牌,并使用会话中存储的令牌对其进行验证setToken()
函数,并且validateToken()
函数将在表单提交后被调用
现在我想写zend自定义验证器
。这将完成整个过程
这是我的自定义验证器:
class My_Validator_Csrf extends Zend_Validate_Abstract
{
const INVALID_TOKEN = 'invalid_token';
/**
* Message templates
* @var array
*/
protected $_messageTemplates = array(
self::INVALID_TOKEN => "csrf_form_error",
);
/**
* Generates and set token in session.
*/
public function __construct()
{
$request = Zend_Controller_Front::getInstance()->getRequest();
if (!$request->isPost()) {
$csrfValidator = new Website_Service_CsrfValidator();
$csrfValidator->setToken();
}
}
/**
* Validates csrf token.
*
* @return boolean
*/
public function isValid($value)
{
$csrfValidator = new Website_Service_CsrfValidator();
if (!$csrfValidator->validateToken()) {
$this->_error(self::INVALID_TOKEN);
return false;
}
return false;
}
}
问题:
setToken()
函数只能在加载表单时调用,而不能在表单提交后调用。所以,我检查方法是否不是post,为此,我使用前端控制器在表单验证器中拥有请求对象
$request = Zend_Controller_Front::getInstance()->getRequest();
if (!$request->isPost()) {
$csrfValidator = new Website_Service_CsrfValidator();
$csrfValidator->setToken();
}
我不确定这是否合法。如果没有,请建议我实现上述情景的另一种方法
提前感谢您可以尝试此操作(注意:将“发送”更改为提交按钮的id属性值):
另一种选择是将表单提交发布到不同的url/操作
if ($request->getParam('send', false)) { // user submitted form
...
} else { // form not yet submitted
...
}