![](/img/trans.png)
[英]Symfony 2 generate:bundle - with or without namespace /Bundle/
[英]Symfony 3 - menu without bundle
我有一个很大的静态主菜单,只有3个项目需要从数据库中加载。 这些项目有自己的子项,因此它们位于多维数组中,每个项目都需要有自己的select,因此3x select = 3x multi array。
我认为我不需要任何捆绑销售商品,因为选择此商品既快捷又容易。 (+这是具有非标准db结构的项目,因此实现捆绑可能会更困难)
但是我是Symfony的新手,所以我的问题是如何在一个地方从db加载菜单项,然后将其发送给视图? 我不想在每个控制器/方法中加载此项目。
我已经尝试过使树枝扩展,但是在获得此数组后,我需要对其进行迭代并在php类中构建html字符串...我认为这是一个非常糟糕的主意...
Twig Extension是前往此处的正确方法。 但是您不必在PHP中构建html字符串(这确实是错误的)。 您可以在扩展类中呈现Twig模板。
示例代码:
<?php
namespace AppBundle\Twig;
class MenuExtension extends \Twig_Extension
{
public function __construct() //suitable dependecies here - probably Doctrine
{
//assign params to class properties
}
public function getName()
{
return 'menu_extension';
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('menuRenderer', [$this, 'menuRenderer'], [
'needs_environment' => true,
'is_safe' => ['html']
])
];
}
public function menuRenderer(\Twig_Environment $environment)
{
//do all the work to get data from DB
return $environment->render('AppBundle:Menu:main-menu.html.twig', array(
//pass data to template
));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.