Symfony2 - 捆绑以外的东西

时间:2012-06-11 18:20:53

标签: php frameworks symfony

我目前正在开发一个项目,我需要的东西比捆绑更多。我称之为“模块”的东西。 它应该与捆绑包的不同之处在于,当项目启动时,系统不知道将使用哪些“模块” 以及如何配置它们。

此外,我将使用类似于捆绑包的这些模块

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

OR

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

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

所以问题是如何实现这个?

2 个答案:

答案 0 :(得分: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();

相同

答案 1 :(得分:0)

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

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

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