1

我目前正在从事我需要捆绑以外的东西的项目。我称之为“模块”的东西。它应该与捆绑包不同,因为当项目启动时系统不知道将使用哪些“模块”以及如何配置它们。

我也将使用类似于捆绑包的这些模块

$response = $this->forward('AcmeHelloModule:Hello:fancy');

或者

$response = $this->forward('Acme/Hello:Hello:fancy');

这里 HelloController->fancyAction(); 将被执行。这个控制器在文件 /src/modules/Acme/Hello/Controller/HelloController.php 中描述

那么问题是如何实现呢?

4

2 回答 2

0

在 AppKernel 中添加以下方法:

public function getBundle($name, $first = true)
{
    if (substr($name, -6) == 'Module')) {
        return $this->getBundle('ModuleBundle')->getModule($name, $first);
    }

    return parent::getBundle($name, $first);
}

并且所有逻辑都在 ModuleBundle 中运行。但要确保响应的类型与 Kernel->getBundle(); 相同。

于 2012-06-12T07:38:31.570 回答
0

一个解决方案是实现一个可以动态安装、加载和运行您所谓的模块的 PluginBundle。

PluginBundle 根本不包含特定的插件代码,而是您的模块/插件的运行时环境。然后,您可以将启用的插件/模块保存在数据库中,并在运行时动态加载它们。

有了这个解决方案,应该可以创建一个动态插件机制,就像在 wordpress 中一样。在运行时修改 AppKernel 不是一个好的解决方案,因为您还必须在禁用捆绑包时清除缓存。

于 2012-06-12T13:00:10.313 回答