我目前正在开发一个项目,我需要的东西比捆绑更多。我称之为“模块”的东西。 它应该与捆绑包的不同之处在于,当项目启动时,系统不知道将使用哪些“模块” 以及如何配置它们。
此外,我将使用类似于捆绑包的这些模块
$response = $this->forward('AcmeHelloModule:Hello:fancy');
OR
$response = $this->forward('Acme/Hello:Hello:fancy');
这里HelloController-> fancyAction();将被执行。这个控制器描述在文件/src/modules/Acme/Hello/Controller/HelloController.php中
所以问题是如何实现这个?
答案 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不是一个好的解决方案,因为你还必须在启用捆绑包时清除缓存。