为每个动态创建的菜单创建不同的类


Creating different classes for each dynamicly created menu

我正在使用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-manu-section2"。。。

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

好吧,只需使用$section并修改它。使用ZF2,您可以使用Filter CamelCaseToDash

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

现在,您可以使用$classFiltered进行CSS类分配。

既然你在标签中提到了这两个框架。如果您使用ZF2,那么代码就太可怕了:D您应该为自己创建一个呈现Menu的ViewHelper。Evan Coury写了一篇关于如何做到这一点的简单介绍。

除此之外,您不需要对某些Application::getInstance()进行静态调用。如果您想访问配置,可以通过ServiceLocator进行访问。在控制器中,这看起来像这样:

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

如果您需要Controller之外的另一个类中的配置,则可以从ServiceLocator创建该类,并将配置注入该类。