2

我正在尝试创建一个 ZF1 插件来集中我的身份验证系统。到目前为止,这是我所做的:

class Application_Plugin_Auth extends Zend_Controller_Plugin_Abstract {

    private $_whitelist;
    protected $_request;

    public function __construct() {
        $this->_whitelist = array(
            'default'
        );
    }

    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        $this->_request = $request;
        $module = strtolower($this->_request->getModuleName());

        if (in_array($module, $this->_whitelist)) {
            return;
        }

        $auth = Zend_Auth::getInstance();
        if (!$auth->hasIdentity()) {
            $this->_request->setModuleName('admin'); 
            $this->_request->setControllerName('auth');
            $this->_request->setActionName('login');
            return;
        }
    }
}

如果没有记录,它可以完美地避免人们访问后端。现在,我想实现一个没有参数login的函数,它将获取当前请求,检查参数(getPost),然后执行登录工作:

public function login(){
    // Here will check the request data and then try to login
}

我的问题是如何在这个函数中获取当前的请求对象?另外,如何在我的控制器中使用这个登录功能?

非常感谢

4

1 回答 1

0

当您不想将请求作为参数传递给函数时,这就是您想要的:

$request = Zend_Controller_FrontController::getInstance()->getRequest();
$postData = $request->getPost();

但是,通常您确实希望将参数传递给您的函数。主要是因为您希望使用登录功能操作的对象独立于系统的其余部分。只有少数情况下我能想到与这种方法不同意的情况。

当您想Request从前端控制器获取时,您可以发出:

$request = $this->getRequest();
于 2013-04-15T14:52:08.623 回答