我使用symfony和yaml配置如下内容:
foo_menu:
groups:
main:
items:
# ...
side:
items:
# ...
footer:
items:
# ...
我的想法是foo_menu.groups
下定义的每个树都应该有自己的服务定义。每个服务都是MenuService
的实例,并且其中包含所有已定义的项目。每个服务都应该可以通过名称访问,例如foo.menu.main
,foo.menu.side
,...
菜单构建工作完美,但我不知道如何以及在何处注册服务名称。
我尝试使用编译器传递,但它不能工作:
final class MenuCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
// ...
foreach ($names as $name) {
$id = sprintf('foo.menu.group.%s', $name);
$menu = $factory->getMenu($name);
$container->set($id, $menu);
}
}
}
答案 0 :(得分:0)
搞定了。这比我预期的要容易
foreach ($groups as $name => $items) {
$id = sprintf('foo.menu.group.%s', $name);
$definition = new Definition(MyBuilder::class, array($items));
$container->setDefinition($id, $definition);
}