我正在创建一个控制面板应用程序,它有一个包含一些基本功能的基本包和用于高级和特定功能的特定包。
例如,基本包处理用户身份验证并保存所有模板资产,其他包添加功能以配置操作系统的不同部分。
我需要能够将基本包布局中的菜单链接添加到其他每个包。而且我更喜欢在每个捆绑配置中都这样做,这样我就可以为不同的客户端混合和匹配功能。
我阅读了所有关于编译器通道、扩展和依赖注入的信息,但没有运气。这样做是否正确?
如果您使用的是 Twig,这应该可以解决问题...
{% render "DifferentBundle:ControllerName:functionalityName" with {'argument_name': 3} %}
你应该functionalityNameAction
在你的 DifferentBundle 控制器中有一个方法来让它工作。
查看文档中的创建和使用模板 - 嵌入控制器部分。
希望能帮助到你。
以防万一有人遇到类似问题,以下是我实现此目的的方法:
我在我的 BaseBundle 中创建了一个服务,它实现了 __get 、 __set 、 __isset 和 __unset 魔术方法,并有一个额外的 append 方法。它将变量存储在类内的静态变量中。然后我将 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 ]