我有小问题。我创建了一个将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会把这个文件保存在会话中还是别的什么?