2013-08-29 60 views
1

我正在使用Zend2,我正在动态创建菜单项。 这是我使用的功能:为每个动态创建的菜单创建不同的类

public static function getAdminMenu() { 
    $config = \App\Application::getInstance()->getConfig(); 
    $menuItems = $config['menu_items']; 

    $html = '<ul>'; 
    foreach ($menuItems as $section => $menuItem) { 
     $html .= '<div class="user-menu-section">' . $section . '</div>'; 
     foreach ($menuItem as $subSection => $params) { 
      $html .= '<li><a href="' . $config['router']['routes'][$menuItem[$subSection]['link']]['options']['route'] . '">' . $subSection . '</a></li>'; 
     } 
    } 
    $html .= '</ul>'; 
    return $html; 
} 

如何创建一个不同种类的用户菜单部分为每个菜单项的div。它应该是像'user-menu-section1','user-menu-section2'...

或者可能更好地使用这样的事情: <div class="' . $section . '">; 但在这种情况下,如果$ section是一个由两个单词组成的字符串,那么如果可能的话,我需要在单词和两个单词之间使用' - '。

回答

2

那么,只需使用您的$section并修改此。使用ZF2,你会使用过滤器CamelCaseToDash

$filter  = new \Zend\Filter\Word\CamelCaseToDash(); 
$classFiltered = strtolower($filter->filter($class);) 

现在你可以使用$classFiltered为你的CSS级分配。

既然你已经提到了你的标签中的两个框架。如果您使用的是ZF2,那么该代码非常糟糕:D您应该创建一个呈现菜单的ViewHelper。 Evan Coury has written a very easy introduction on how to do that.

除此之外,您不需要静态调用某些Application::getInstance()。如果你想访问配置,你可以通过ServiceLocator来完成。在一个控制器,这将是这样的:

$config = $this->getServiceLocator()->get('config'); 

如果您需要在另一大类配置的控制器之外,您创建从服务定位类和注入配置到这个班。