当前我正在研究一些项目(基于ZF),我想知道是否可以关闭一个或多个模块。关闭我的意思是ZF根本不加载它。
更准确地说,我想关掉一个现有的app模块 假设我的应用程序包含一些模块,这些模块是由sombody else编写的,而我当时正在编写 我不想用它。 我希望这个问题对你有意义。
-
最诚挚的问候,
罗伯特
答案 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,所以我不确定这一点,但必须有这样的东西。