【问题标题】:Nested menu items at SonataAdminBundle sidebarSonataAdminBundle 侧边栏中的嵌套菜单项
【发布时间】:2015-06-11 02:18:03
【问题描述】:

我想像树一样嵌套菜单项。我目前有这个配置:

dashboard:
    groups:
        company:
            icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i>
            label: Company
            items:
                - sonata.admin.company
                - sonata.admin.brand
                - sonata.admin.media
                - sonata.admin.message
        territory:
            icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i>
            label: Territory
            items:
                - sonata.admin.territory
                - sonata.admin.target
        reps:
            icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i>
            label: Representative
            items:
                - sonata.admin.representative
                - sonata.admin.email
                - sonata.admin.targetbrand
                - sonata.admin.territorybrand

我想要类似的东西:

dashboard:
    groups:
        company:
            icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i>
            label: Company
            label_catalogue: PDOneBundle
            items:
                - sonata.admin.company
                    - sonata.admin.brand
                        - sonata.admin.media
                        - sonata.admin.message
        territory:
            icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i>
            label: Territory
            label_catalogue: PDOneBundle
            items:
                - sonata.admin.territory
                     - sonata.admin.target
        reps:
            icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i>
            label: Representative
            label_catalogue: PDOneBundle
            items:
                - sonata.admin.representative
                    - sonata.admin.email

我该怎么做?有可能吗?

更新

基于 SonataAdminBundle 的 docs@hugo-briand 的推荐,我对 extending the menu 进行了一些更改,因此我在 PDI\PDOneBundle\EventListener\MenuBuilderListener.php 下创建了一个文件,如下所示: p>

namespace PDI\PDOneBundle\EventListener;
use Sonata\AdminBundle\Event\ConfigureMenuEvent;

class MenuBuilderListener
{
    public function createMainMenu(ConfigureMenuEvent $event)
    {
        $menu = $event->getMenu();

            $menu
                ->addChild('Dashboard', array('uri' => '/'))
                ->setAttribute('icon', 'fa fa-home');

            $menu
                ->addChild('Company', array())
                ->setAttribute('icon', 'fa fa-inbox')
                ->addChild('Company', array(
                   'route' => 'admin_pdi_pdone_company_list',
                ))
                ->setAttribute('icon', 'fa fa-inbox')
                ->getParent()
                ->addChild('Brand', array(
                    'route' => 'admin_pdi_pdone_brand_list',
                ))
                ->setAttribute('icon', 'fa fa-inbox')
                ->addChild('Media', array(
                    'route' => 'admin_pdi_pdone_media_list',
                ))
                ->setAttribute('icon', 'fa fa-inbox')
                ->getParent();
    }
}

然后我在PDI\PDOneBundle\Resources\config\services.yml注册了监听器,如下:

services:
    app.menu_listener:
        class: PDI\PDOneBundle\EventListener\MenuBuilderListener
        tags:
            - { name: kernel.event_listener, event: sonata.admin.event.configure.menu.sidebar, method: createMainMenu }

但由于仍显示相同的默认菜单,因此无法正常工作。有什么建议吗?

【问题讨论】:

    标签: php symfony sonata-admin symfony-sonata sonata


    【解决方案1】:

    是的,你可以。但与您指定的不完全一样。

    SonataAdmin 现在集成了 KnpMenu 来生成侧边菜单。它记录在这里(https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_knp_menu.html);不过请注意使用主版本,这还没有作为稳定版本发布。

    注意:由于文档尚未重新发布,因此缺少一些信息。不过,您可以直接在 Github 存储库中看到它:https://github.com/sonata-project/SonataAdminBundle/blob/41328b42f91bf4c72153cdb1fc2c50a5092c7755/Resources/doc/cookbook/recipe_knp_menu.rst

    对于菜单中的每个项目,您现在可以提供一个 KnpMenu 提供程序来生成您的菜单,并覆盖相关的布局。

    【讨论】:

    • 你能写一个小代码告诉我怎么做吗?正如你告诉我的那样,我在掌握,但根本不清楚如何嵌套菜单。我想嵌套默认的管理操作而不是在菜单中添加新条目,如何?
    • @ReynierPM 我用一个链接更新了我的答案,其中详细解释了所有内容;我对第一个不好,我认为文档是最新的。
    • @ReynierPM 您是否检查过您的服务是否已正确注册?事件是否被调用?我宁愿考虑文档的使用菜单提供程序部分,但我从未尝试过使用事件侦听器。
    • 是的,服务已正确注册,但我不知道是否调用了事件。我看到的是我的应用程序没有错误,如果有任何错误 Symfony 将触发它。你还想到了什么?
    • 我正在考虑服务或事件监听器注册的问题;也许您可以尝试调试并在事件侦听器中设置断点?
    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 2014-07-03
    • 1970-01-01
    • 2018-03-29
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多