我正在创建一个控制面板应用程序,该应用程序具有一个基本捆绑包,其中包含一些基本功能以及用于高级和特定功能的特定捆绑包。
例如,基础捆绑包处理用户身份验证并保存所有模板资产,其他捆绑包添加功能以配置操作系统的不同部分。
我需要能够在基础捆绑包的布局中添加菜单链接到其他每个捆绑包。 我更喜欢在每个捆绑包配置中执行此操作,以便我可以为不同的客户端混合和匹配功能。
我阅读了所有关于编译器传递,扩展和依赖注入的信息,但没有运气。 这样做是否正确?
如果您使用的是 Twig,这应该可以解决问题...
{% render "DifferentBundle:ControllerName:functionalityName" with {'argument_name': 3} %}
您应该在 DifferentBundle 控制器中有一个functionalityNameAction
方法才能正常工作。
请查看文档中的创建和使用模板 - 嵌入控制器部分。
希望对您有所帮助。
以防万一有人遇到类似的问题,以下是我实现这一点的方法:
我在 BaseBundle 中创建了一个服务,它实现了__get、__set、__isset和__unset魔术方法,并有一个额外的追加方法。 它将变量存储在类内的静态变量中。然后,我将侦听器添加到我的所有捆绑包中:
namespace MbsOtherBundleListener;
use MbsBaseBundleServicesGlobalVars;
use SymfonyComponentHttpKernelEventFilterControllerEvent;
class ControllerListener
{
protected $_global_vars;
public function __construct(GlobalVars $global_vars)
{
$this->_global_vars = $global_vars;
}
public function onKernelController(FilterControllerEvent $event)
{
$this->_global_vars->append('bundles', 'mbs.other');
}
}
这是我的服务.yml之一捆绑包。GlobalVars是我之前提到的类。
services:
mbs.base_controller_listener:
class: MbsOtherBundleListenerControllerListener
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
arguments: [ @mbs.global_vars ]