我正在尝试使用ezpublish5为我的页面创建一个菜单。我按照本教程http://partialcontent.com/Code/working-with-ez-publish-5-subrequests进行了操作。 我是Symfony的新手,但我有自己的捆绑并运行,至少它使用我自己的pagelayout.html.twig。
我理解,路由的作用是什么,但就我创建菜单而言,我担心的是我需要其他东西,可能是服务,所以我可以在我的twig-template中做到这一点
{{ render( controller( "myMenuController:myFunction" ) ) }}
所以我将它添加到我的\ Bundle \ Resources \ config \ services.yml
parameters:
my_root.menucontroller.class: my\Bundle\Controller\MenuController
services:
my_root.controller:
class: %my_root.menucontroller.class%
arguments: [@ezpublish.view_manager]
calls:
- [setContainer, [@service_container] ]
myalias:
alias: my_root.controller
当我在浏览器中打开它时,它说:
You have requested a non-existent service "myalias".") in "{% extends "Bundle::pagelayout.html.twig" %}
我在github上检查了ezp5安装的其他回购,他们有几乎相同的yml-setup。 我也意识到,当我在services.yml中故意制造语法错误时(在模板中省略对控制器的调用)它不会改变任何东西。 我也意识到,当我在我的\ Bundle \ DependencyInjection \ myBundleExtension.php(它应该加载我的services.yml文件)中做同样的事情时,它也不会发生任何事情。
所以我感觉到bundle-setup的错误,不知道所有东西都没有正确加载。但它可能是什么? 在symfony2的文档中的某处,它表示Bundle \ DependencyInjection \ xyzExtension.php中的load-method被自动调用。
有人会知道我的设置可能出现什么问题吗?我真的没想到了。 对于ezpublish5部分..这真的是现在创建菜单的最佳方式吗?
答案 0 :(得分:0)
看起来您的服务似乎没有被加载。
Symfony依赖于命名约定来加载xyzExtension.php。它绊了我几次。你可以在xyzExtension.load中粘贴一个die语句来验证它确实被调用了。
如果没有被调用,你可以更改扩展类名称以满足约定或执行我的操作,只是覆盖bundle类中的约定。
namespace Cerad\Bundle\GameV2Bundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Cerad\Bundle\GameV2Bundle\DependencyInjection\GameExtension;
class CeradGameV2Bundle extends Bundle
{
public function getContainerExtension()
{
return new GameExtension();
}
}
当然xyzExtension应该有类似的东西:
namespace Cerad\Bundle\GameV2Bundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\Config\FileLocator;
class GameExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
public function getAlias() { return 'cerad_game_v2'; }
}
从命令行,您可以验证您的服务是否已被提取:
app/console container:debug : grep my_root