我们是一个使用 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()] 就可以了。我的错。