Zend Framework中特定于模块的Controller插件

RWS*_*RWS 4 php model-view-controller zend-framework

我的Zend Framework项目分为几个模块.每个模块都有一些特定的控制器插件.

现在,问题是所有插件都被加载和注册(因此被调用) - 无论用户尝试访问哪个模块.

可以测试我们在哪个模块中并直接在插件中停止执行,但我必须在每个插件中执行此操作...

是否有一种优雅的方式来只注册特定于模块的插件?或者我在这里试图解决错误的问题?

taw*_*kov 6

这是模块特定插件的示例

摘自http://weierophinney.net/matthew/archives/234-Module-Bootstraps-in-Zend-Framework-Dos-and-Donts.html

class Foomodule_Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
        if ('foomodule' != $request->getModuleName()) {
            // If not in this module, return early
            return;
        }

        // Change layout
        Zend_Layout::getMvcInstance()->setLayout('foomodule');
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:万一你错过了,上面同一篇文章中列出了其他方式:

有没有更好的方法来做到这一点?

是的,可能有更好的方法来实现这一目标.真正的问题是模块目前在ZF中确实是二等公民.有一些巧妙的想法浮出水面: Kathryn的Active模块配置

Jeroen的Moduleconfig

Matthijs的ModuleConfig

Pádraic和Rob的模块配置器提案