Php Symfony2-不是捆绑的东西

Php Symfony2-不是捆绑的东西,php,frameworks,symfony,Php,Frameworks,Symfony,我现在正在做一个项目,我需要的不是捆绑的东西。我称之为模块的东西。 它应该不同于捆绑包,因为当项目启动时,系统不知道将使用哪些模块 以及如何配置它们 我还将使用这些模块,类似于bundle $response = $this->forward('AcmeHelloModule:Hello:fancy'); 或 这里是HelloController->fancyAction;将被处决。这个控制器在文件/src/modules/Acme/Hello/controller/HelloContr

我现在正在做一个项目,我需要的不是捆绑的东西。我称之为模块的东西。 它应该不同于捆绑包,因为当项目启动时,系统不知道将使用哪些模块 以及如何配置它们

我还将使用这些模块,类似于bundle

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

这里是HelloController->fancyAction;将被处决。这个控制器在文件/src/modules/Acme/Hello/controller/HelloController.php中描述


所以问题是如何实现这一点?

在AppKernel中添加以下方法:

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

    return parent::getBundle($name, $first);
}
所有的逻辑都在模块绑定中运行。
但是要确保响应的类型与Kernel->getBundle相同

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

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


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

为什么不使用绑定包?symfony唯一知道的另一件事是供应商库,但它们不应包含控制器代码。创建动态CMS需要模块,模块将安装在其中,例如Wordpress中,也就是说,它们将由用户使用鼠标完成。这并不能解释为什么不使用捆绑包?实际上,Symfony2只是调用它的模块包,但它们只是一种模块。S2没有提供在运行时包含bundle的解决方案并不意味着它是错误的,这取决于实现;所以,在向前扩展方法和渲染时存在问题?
public function getBundle($name, $first = true)
{
    if (substr($name, -6) == 'Module')) {
        return $this->getBundle('ModuleBundle')->getModule($name, $first);
    }

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