将FOSMessageBundle集成到SonataAdminBundle时会遇到困难。我希望FOSMessage在Sonata的菜单下。所以我制作了FOSMessage的基本布局来扩展标准的奏鸣曲布局:
{% extends "::standard_layout.html.twig" %}
问题是奏鸣曲菜单需要一些额外的树枝变量,这些变量是在基于CoreController的控制器中生成的:
array(
'base_template' => $this->getBaseTemplate(),
'admin_pool' => $this->container->get('sonata.admin.pool'),
'blocks' => $this->container->getParameter('sonata.admin.configuration.dashboard_blocks')
);
是否有一种简单的方法可以为这些变量提供外部(FOSMessageBundle)模板?
答案 0 :(得分:4)
找到合适的解决方案。
在标准的Sonata布局中,替换所有菜单内容并将其放入简单控制器中的隔离模板中:
{% render(controller('MyBundle:SonataMenu:index')) %}
控制器:
namespace MyBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sonata\AdminBundle\Controller\CoreController;
class SonataMenuController extends CoreController
{
/**
* @Route("/admin/sonata_menu", name="sonata_menu")
* @Template()
*/
public function indexAction()
{
return array(
'admin_pool' => $this->container->get('sonata.admin.pool'),
);
}
}
现在标准布局对于任何第三方继承都是免费的。
答案 1 :(得分:3)
很好的解决方案!如果您需要扩展奏鸣曲布局,则必须至少使用 admin_pool 变量并将其传递给您的模板:
$admin_pool = $this->get('sonata.admin.pool');
return $this->render('ProjectBundle:Controller:page.html.twig', array(
'admin_pool' => $admin_pool
));
另见: