将参数传递给不同bundle中的视图 - symfony2



我正在创建一个控制面板应用程序,该应用程序具有一个基本捆绑包,其中包含一些基本功能以及用于高级和特定功能的特定捆绑包。

例如,基础捆绑包处理用户身份验证并保存所有模板资产,其他捆绑包添加功能以配置操作系统的不同部分。

我需要能够在基础捆绑包的布局中添加菜单链接到其他每个捆绑包。 我更喜欢在每个捆绑包配置中执行此操作,以便我可以为不同的客户端混合和匹配功能。

我阅读了所有关于编译器传递,扩展和依赖注入的信息,但没有运气。 这样做是否正确?

如果您使用的是 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 ]

最新更新