icings / menu
为 CakePHP 开发的一个经过 KnpMenu 调味的菜单插件。
5.0.0
2023-09-13 20:46 UTC
Requires
- php: >=8.1
- cakephp/cakephp: ^5.0
- knplabs/knp-menu: ^3.3
Requires (Dev)
- cakephp/cakephp-codesniffer: ^5.0
- phpunit/phpunit: ^10.1
README
这是一个KnpMenu 插件,帮助您为您的 CakePHP 应用程序创建菜单。
需求
- CakePHP 5.0+(如果您需要与 CakePHP 4 兼容,请使用此插件的 4.x 分支)
- KnpMenu 3.3+
安装
-
使用 Composer 将菜单插件添加到您的项目中
$ composer require icings/menu
-
确保您在引导文件中加载了插件,可以运行
$ bin/cake plugin load Icings/Menu
或者在
src/Application.php
文件的Application
类的bootstrap()
方法中添加以下调用$this->addPlugin('Icings/Menu');
-
在
src/View/AppView.php
文件中AppView
类的initialize()
方法中加载助手$this->loadHelper('Icings/Menu.Menu');
使用方法
详细的用法文档可以在 docs 文件夹中找到。对于熟悉 CakePHP 和 KnpMenu 的用户,以下是快速入门的两个示例。
通过菜单助手
通过助手的 create()
和 render()
方法构建和渲染菜单
$menu = $this->Menu->create('main'); $menu->addChild('Home', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'home']]); $menu->addChild('About', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'about']]); $menu->addChild('Services', ['uri' => '#']); $menu['Services']->addChild('Research', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'research']]); $menu['Services']->addChild('Security', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'security']]); $menu->addChild('Contact', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'contact']]); echo $this->Menu->render();
在默认设置中,这将生成以下 HTML
<ul> <li> <a href="/pages/display/home">Home</a> </li> <li> <a href="/pages/display/about">About</a> </li> <li class="has-dropdown"> <a href="#">Services</a> <ul class="dropdown"> <li> <a href="/pages/display/research">Research</a> </li> <li> <a href="/pages/display/security">Security</a> </li> </ul> </li> <li> <a href="/pages/display/contact">Contact</a> </li> </ul>
直接使用库
除了使用菜单助手及其各种配置选项外,还可以手动使用此插件提供的库,并可选地将其与 KnpMenu 库结合使用
use Icings\Menu\Integration\PerItemVotersExtension; use Icings\Menu\Integration\RoutingExtension; use Icings\Menu\Integration\TemplaterExtension; use Icings\Menu\Matcher\Matcher; use Icings\Menu\Matcher\Voter\UrlVoter; use Icings\Menu\MenuFactory; use Icings\Menu\Renderer\StringTemplateRenderer; $factory = new MenuFactory(); $factory->addExtension(new RoutingExtension()); $factory->addExtension(new PerItemVotersExtension()); $factory->addExtension(new TemplaterExtension()); $menu = $factory->createItem('main'); $menu->addChild('Home', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'home']]); $menu->addChild('About', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'about']]); $menu->addChild('Services', ['uri' => '#']); $menu['Services']->addChild('Research', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'research']]); $menu['Services']->addChild('Security', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'security']]); $menu->addChild('Contact', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'contact']]); $matcher = new Matcher(); $matcher->addVoter(new UrlVoter($this->request)); $renderer = new StringTemplateRenderer($matcher); echo $renderer->render($menu);
问题
请使用 问题跟踪器 报告问题。