繁体   English   中英

Zend Framework如何做到这一点,以免重复我自己

[英]Zend Framework how to do this in order to not repeat myself

我在多个地方都需要这个东西:

public function init()
{
    $fbLogin = new Zend_Session_Namespace('fbLogin'); #Get Facebook Session
    if(!$fbLogin->user) $this->_redirect('/'); #Logout the user
}

这两行:

    $fbLogin = new Zend_Session_Namespace('fbLogin'); #Get Facebook Session
    if(!$fbLogin->user) $this->_redirect('/'); #Logout the user

在ZendFramework中做这件事的最好方法是创建插件还是? 我的意思是我想在多个地方执行它,但是如果我需要编辑它,我想在一个地方编辑它。

这是一个动作帮助器的示例,您可以轻松地从控制器调用它。

<?php

class My_Helper_CheckFbLogin extends Zend_Controller_Action_Helper_Abstract
{
    public function direct(array $params = array())
    {
        // you could pass in $params as an array and use any of its values if needed

        $request = $this->getRequest();
        $view    = $this->getActionController()->view;

        $fbLogin = new Zend_Session_Namespace('fbLogin'); #Get Facebook Session
        if(!$fbLogin->user) {
            $this->getActionController()
                 ->getHelper('redirector')
                 ->gotoUrl('/'); #Logout the user
        }

        return true;
    }
}

为了使用它,您必须告诉帮助代理它将在哪里生活。 这是您可以放入引导程序中的示例代码:

// Make sure the path to My_ is in your path, i.e. in the library folder
Zend_Loader_Autoloader::getInstance()->registerNamespace('My_');
Zend_Controller_Action_HelperBroker::addPrefix('My_Helper');

然后在您的控制器中使用它:

public function preDispatch()
{
    $this->_helper->CheckFbLogin(); // redirects if not logged in
}

它没有涉及太多细节,但是编写自己的助手也很有帮助。

如果您需要在每个Controller中进行此检查,您甚至可以设置从其扩展的baseController而不是默认的baseController:

class My_Base_Controller extends Zend_Controller_Action
{ 
    public function init()
    { ...

class IndexController extends My_Base_Controller
{ ...

init()移至基本控制器中,无需在每个特定的控制器中重复进行操作。

需要在特定控制器中使用不同的init()吗?

class FooController extends My_Base_Controller
{
    public function init()
    {
        parent::init();
        ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM