Zend Framework - 如何禁用一个或多个模块

时间:2009-12-17 13:03:43

标签: php zend-framework

当前我正在研究一些项目(基于ZF),我想知道是否可以关闭一个或多个模块。关闭我的意思是ZF根本不加载它。

更准确地说,我想关掉一个现有的app模块 假设我的应用程序包含一些模块,这些模块是由sombody else编写的,而我当时正在编写 我不想用它。 我希望这个问题对你有意义。

-
最诚挚的问候,
罗伯特

2 个答案:

答案 0 :(得分:3)

如果我理解正确并且您想要从您的站点禁用模块(视图/控制器组),则可以注册检查路由请求的routeShutdown() FrontController插件。如果禁用,则将用户重定向到错误控制器。

创建一个插件,检查所请求的模块是否已禁用

class MyDisabledModules extends Zend_Controller_Plugin_Abstract
{
    protected $_disabled = array(
        'module1',
        'module2',
        'sales',
    );


    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $module = $request->getModuleName();

        if (in_array($module, $this->_disabled)) {
            $request->setModuleName('default')
                    ->setControllerName('disabled')
                    ->setActionName('index')
                    ->dispatched(false);
        }
    }
}

然后在FrontController

中注册
Zend_Controller_Front::getInstance()
    ->registerPlugin(new MyDisabledModules());

您可以对已禁用的插件进行硬编码,您可以从数据库,xml中获取所需的所有插件。

答案 1 :(得分:3)

我认为Luiz Damim所提出的是过度和错误。每次调用都不需要调用该插件。为什么要为残疾人模块做些什么?

我会根据配置文件进行检测,其中只有活动模块被实例化。

<强>更新 通常模块是实例化的:

$front->addModuleDirectory('/path/to/application/modules');

但是你可以逐个激活模块,或者只传递一个你想要激活的数组。

$front->setControllerDirectory(array(
    'default' => '/path/to/application/controllers',
    'blog'    => '/path/to/application/blog/controllers'
));

如果您使用的是Zend_application,我认为您必须在配置中更改此行:

resources.modules[] =

resources.modules = admin
resources.modules = news

第一个加载模块文件夹中可以找到的任何模块,这是默认行为。我还没有使用Zend Application,所以我不确定这一点,但必须有这样的东西。