繁体   English   中英

Symfony 3-不带菜单的菜单

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM