Php 如何在ZF项目中的所有控制器中加载另一个控制器?

Php 如何在ZF项目中的所有控制器中加载另一个控制器?,php,zend-framework,Php,Zend Framework,我有一个代码片段,它检查用户登录,并在整个站点中获取导航等信息。我有几个控制器,我希望所有控制器中都有这个代码段。每当我改变一些东西时,我都厌倦了一次一个地改变它们。在我的另一个项目中,我看到它以某种方式扩展到使用此部分的其他控制器 class MyController extends Zend_Controller_Action 看起来像 class MyController extends MySnippet_Controller_Action 或者诸如此类的事情,它成功了。但是,我无法

我有一个代码片段,它检查用户登录,并在整个站点中获取导航等信息。我有几个控制器,我希望所有控制器中都有这个代码段。每当我改变一些东西时,我都厌倦了一次一个地改变它们。在我的另一个项目中,我看到它以某种方式扩展到使用此部分的其他控制器

class MyController extends Zend_Controller_Action
看起来像

class MyController extends MySnippet_Controller_Action

或者诸如此类的事情,它成功了。但是,我无法实现这一点。

您正在寻找的可能是针对init()注册的frontcontroller插件,或者更可能是predispatch()。在Zend框架中,扩展Zend_控制器_操作是不受欢迎的,实际上通常不需要

这些资源可以帮助您开发所需的插件:



以下是插件的基本形式:

class My_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
{

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        parent::preDispatch($request);
        //truncated
    }
}

所以我会创建插件,放在像/lib这样的文件夹中(不在控制器、模型中?),然后告诉bootstrap运行我想要的进程?我不必编辑我的控制器或init()或任何东西?换句话说,我的控制器看起来怎么样?我将把这个插件类放在哪里?读这篇文章,它说我创建了插件文件夹,这样我就可以在我的控制器、模型、视图旁边创建一个称为插件的文件夹?然后把它放在那里,然后从那里加载到引导程序中,它应该很好?通常你会把插件放在
application/library/yourNamespace
或任何你想要的地方。然后,您可以在application.ini中用一行
resources.frontController.plugins.acl=“My_Controller\u plugin\u acl”
注册该插件,也可以在引导程序中注册该插件。