1

我们是一个使用 Symfony2 开发的旅游网站。我目前卡在菜单上。当前的设计是这样组织的多级菜单:continents-> countries -> regions.按大洲和按国家/地区分组的国家子菜单。我正在使用 Knp 菜单包。我想使用 foreach 循环动态生成子菜单,因为我不想手动生成每个菜单项。为此,我需要使用一个字符串变量作为数组键,但这不起作用......实体 Continent 和 Country 有一个 toString 方法,该方法清楚地返回getSlug().,使用$menu['south-america']有效但不$menu[$continent] 使用 foreach 循环遍历 Continent 对象 slug。

这是错误消息:

渲染模板时抛出异常

("Warning: Illegal offset type in isset or empty in ***********\vendor
\knplabs\knp-menu\src\Knp\Menu\MenuItem.php line 346") in SiteBundle::layout.html.twig at line 11.

这是我的菜单生成器中的代码:

public function createMenu(RequestStack $requestStack, EntityManager $em)
{
    $menu = $this->factory->createItem('root');

    $menu->addChild('my_account', array(
            'label' => 'My Account'
        ));

   $continents = $em->getRepository('CountryBundle:Continent')->getContinents();
   foreach ($continents as $continent){

       $menu->addChild( $continent, array(
               'label'=> $continent->getName(),
           ));
       $countries = $em->getRepository('CountryBundle:Country')->getCountriesByContinent($continent);
        foreach($countries as $country)
           $menu[$continent]->addChild($country, array(
                   'label'=> $country->getName(),
               ));
   }

谢谢你的建议。

找到的解决方案:

我在发布这个问题时可能有点太快了,因为解决方案在发布后几分钟(经过数小时的测试)跳到我这里似乎 $country 和 $continent 对象不会像我预期的那样自动转换为字符串当用作数组键时。使用 $menu[$continent->getSlug()] 就可以了。我的错。

4

0 回答 0