Symfony2 dynamicaly添加到AppKernel

时间:2016-06-09 11:06:23

标签: php symfony

我有小问题。我创建了一个将bundle(保存在文件中)添加到AppKernel的类。我需要它来安装/卸载“模块”。

appKernel.php中的更改(仅更改了返回)

$kernelManager = new KernelManager();        
return $kernelManager->addModuleBundle($bundles);

现在KernelManager类(方法addModuleBundle,$ this-> bundles是我安装的bundle的数组):

    public function addModuleBundle(array $bundles)
    {
        if(count($this->bundles) > 0 )
        {
            foreach($this->bundles as $namespace){
                $bundle = $namespace.'\\'.str_replace('\\' , '', $namespace);
                $bundles[] = new $bundle;
            }   
        }

        return $bundles;
    }

它是如何工作的:我的类是在appKernel中调用的,它返回带有已安装bundle的bundle数组(它永远不会)。

安装模块后,我的ModuleManager执行两项操作 1.使用已安装的软件包生成新文件 2.生成routing.yml,其中我将默认路由添加到任何模块。

一切都很好但是在安装模块后我收到错误

  

classes.php第4957行中的Twig_Error_Runtime:

     

在渲染模板期间抛出了异常   (“Bundle”BUNDLENAME“不存在或未启用。也许你   忘了将它添加到AppKernel.php的registerBundles()方法中   文件?在@ BUNDLENAME / Resources / config / routing.yml中(正在   从...导入   “ROOT_DIR \供应商\ MYBUNDLEROOT /资源/配置/ routing.yml文件”)。使   确保“BUNDLENAME / Resources / config / routing.yml”包正确无误   在应用程序内核类中注册并加载。如果捆绑   已注册,请确保捆绑路径   “@ BUNDLENAME / Resources / config / routing.yml”不为空。“)in   第21行的“frontend.html.twig”。

frontend.html.twig第21行:

<script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>  

我如何安装模块: 1.我点击按钮安装 2.我的ModuleManager更改DB中的模块以进行安装 3. ModuleManager生成已安装模块(包)的文件 4. ModuleManager使用已安装的模块生成routing.yml 5.浏览器重新加载到有关成功的信息页面(但现在我有错误)。

如果我按f5键刷新浏览器错误消失。

我认为这是缓存的问题,但我无法强制刷新任何方法。

编辑--------------

我又发现了一件事。安装模块后,我试图显示包含已安装包的文件。但它只显示旧捆绑/捆绑(没有new =安装它这个操作)。当我在服务器上检查此文件时,我看到了更改。也许SF2会把这个文件保存在会话中还是别的什么?

0 个答案:

没有答案