malezha/laravel-menu
最新稳定版本:3.2.0
Composer 安装命令:
composer require malezha/laravel-menu
包简介
Menu builder for Laravel 5
README 文档
README
Install
Require this package with composer using the following command:
composer require malezha/laravel-menu
After updating composer, add the ServiceProvider to the providers array in config/app.php
Malezha\Menu\MenuServiceProvider::class,
For use facade add alias to config/app.php
'Menu' => Malezha\Menu\MenuFacade::class,
Copy the package config to your local config with the publish command:
php artisan vendor:publish --provider="Malezha\Menu\MenuServiceProvider"
Usage
use Malezha\Menu\Contracts\Builder; use Menu; Menu::make('main', function(Builder $builder) { // Create menu element $builder->create('element_name', ElementClass::class, function (ElementFactory $factory) { $factory->elementParameter; return $factory->build(); }); # Avaliable elements // Link. Html: // <li attributes|activeAttributes><a href="url" linkAttributes>title</a></li> use Malezha\Menu\Element\Link; use Malezha\Menu\Factory\LinkFactory; $builder->create('link', Link::class, function (LinkFactory $factory) { $factory->title = 'Title'; $factory->url = '/'; $factory->attributes->put('class', 'li'); $factory->activeAttributes->push(['class' => 'active-element']); $factory->linkAttributes->set(['id' => 'link']); $factory->displayRule = true; // Boolean or callable witch return boolean return $factory->build(); }); // Submenu. Html: // <li attributes|activeAttributes> // <a href="url" linkAttributes>title</a> // <ul>...</ul> // </li> use Malezha\Menu\Element\SubMenu; use Malezha\Menu\Factory\SubMenuFactory; $builder->create('submenu', SubMenu::class, function (SubMenuFactory $factory) { // Submenu exdends Link so all parameters available $factory->builder->create(...); // Create submenu element return $factory->build(); }); // Text. Html: // <li attributes>Text</li> use Malezha\Menu\Element\Text; use Malezha\Menu\Factory\TextFactory; $builder->create('submenu', Text::class, function (TextFactory $factory) { $factory->text = 'Text'; $factory->attributes->put('class', 'deliver'); $factory->displayRule = true; return $factory->build(); }); }); // Building menu from array $array = [ 'type' => 'ul', 'view' => 'menu::view', // Default view 'attributes' => [ 'class' => 'menu', ], 'activeAttributes' => [ 'class' => 'active', ], 'elements' => [ 'index' => [ 'type' => 'link', 'view' => 'menu::elements.link', // Default view may be changed in config 'url' => 'http://example.com', 'attributes' => [], 'activeAttributes' => [ class' => 'active', ], 'linkAttributes' => [], 'displayRule' => true, ], ... 'settings' => [ 'type' => 'submenu', 'view' => 'menu::elements.submenu', 'url' => 'http://example.com', 'attributes' => [], 'activeAttributes' => [ class' => 'active', ], 'linkAttributes' => [], 'displayRule' => true, 'builder' => [ 'type' => 'ul', 'view' => '_partial.submenu', // U can set view for submenu singly ... 'elements' => [ ... ], ], ], ] ]; $builder = Menu::fromArray('from-array', $array); $html = $builder->render(); // Menu::render('from-array'); // $builder->toArray() === $array;
Simple example
use Malezha\Menu\Contracts\Builder; use Malezha\Menu\Element\Link; use Malezha\Menu\Element\SubMenu; use Malezha\Menu\Factory\LinkFactory; use Malezha\Menu\Factory\SubMenuFactory; use Menu; Menu::make('main', function (Builder $builder) { $builder->create('index', Link::class, function(LinkFactory $factory) { $factory->title = 'Index Page'; $factory->url = '/'; $factory->linkAttributes->push(['class' => 'menu-link']); return $factory->build(); }); $builder->create('orders', SubMenu::class, function(SubMenuFactory $factory) { $factory->attributes->push(['class' => 'child-menu']); $factory->title = 'Orders'; $factory->url = 'javascript:;'; $factory->builder->create('all', Link::class, function(LinkFactory $factory) { $factory->title = 'All'; $factory->url = '/orders/all'; return $factory->build(); }); $factory->builder->create('type_1', Link::class, function(LinkFactory $factory) { $factory->title = 'Type 1'; $factory->url = '/orders/1'; $factory->linkAttributes->push(['class' => 'text-color-red']); return $factory->build(); }); $factory->builder->create('type_2', Link::class, function(LinkFactory $factory) { $factory->title = 'Type 2'; $factory->url = '/orders/2'; $factory->linkAttributes->push(['data-attribute' => 'value']); return $factory->build(); }); return $factory->build(); }); });
<!-- \Menu::render('main') --> <ul> <li><a href="/" class="menu-link">Index Page</a></li> <li class="child-menu"> <a href="javascript:;">Orders</a> <ul> <li><a href="/orders/all">All</a></li> <li><a href="/orders/1" class="text-color-red">Type 1</a></li> <li><a href="/orders/2" data-attribute="value">Type 2</a></li> </ul> </li> </ul>
License
malezha/laravel-menu 适用场景与选型建议
malezha/laravel-menu 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 215 次下载、GitHub Stars 达 3, 最近一次更新时间为 2015 年 08 月 22 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「menu」 「laravel」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 malezha/laravel-menu 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 malezha/laravel-menu 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 malezha/laravel-menu 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A Symfony extension to get active class base on current bundle/controller/action
Yii2 DynaTree Menu widget uses Dynamic tree view control jquery.dynatree.js
Alfabank REST API integration
Create simple top navigation for laravel
Simple Object oriented menus for Symfony.
Filter Eloquent
统计信息
- 总下载量: 215
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 15
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2015-08-22