将参数传递给另一个包中的视图 - symfony2

时间:2012-10-15 15:50:41

标签: php symfony

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

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

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

我读了所有关于编译器通过,扩展和依赖注入的内容,没有运气。这样做是否正确?

2 个答案:

答案 0 :(得分:0)

如果您正在使用Twig,这应该可以解决问题......

{% render "DifferentBundle:ControllerName:functionalityName" with {'argument_name': 3} %}

您的DifferentBundle控制器中应该有一个functionalityNameAction方法,以便它可以工作。

请查看文档中的Creating and using Templates - Embedding Controllers部分。

希望它有所帮助。

答案 1 :(得分:0)

万一有人遇到类似的问题,我就是这样做的:

我在BaseBundle中创建了一个服务,它实现了__get,__ set,__ isset和__unset魔术方法,并且有一个额外的追加方法。它将变量存储在类中的静态变量中。 然后我将Listeners添加到我的所有包中:

namespace Mbs\OtherBundle\Listener;

use Mbs\BaseBundle\Services\GlobalVars;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;

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');
    }
}

这是我的services.yml中的一个捆绑包。 GlobalVars是我之前提到的类。

services:
    mbs.base_controller_listener:
        class: Mbs\OtherBundle\Listener\ControllerListener
        tags:
            - { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
        arguments:  [ @mbs.global_vars ]