monstergfx / menubuilder
适用于 Laravel4、Sentry2 和 Twitter Bootstrap 的菜单构建器和渲染器
Requires
- php: >=5.3.0
- illuminate/support: 4.0.x
This package is not auto-updated.
Last update: 2024-09-23 15:05:11 UTC
README
用于 Laravel 4、Twitter Bootstrap、Cartalyst/Sentry 2 和 Dark/SmartyView 的菜单构建器。
简介
在开发多个使用 Laravel4、Sentry2 和 Smarty 的项目时,我需要一个在图形界面中管理菜单的方法。过去,我曾在数据库中构建菜单表和菜单编辑器,但通常我不需要那么灵活(或那么大的开销)。
因此,这次我寻找一种在代码中定义菜单并自动生成菜单的方法。我想出的解决方案是 Menubuilder,我现在正在将其重构为一个包,我将将其用于多个项目。
请注意,此项目与我的需求高度契合,可能不适用于我的环境之外。
欢迎提交拉取请求。请注意,我正在使用 git flow 作为我的工作流程。不知道这是什么?请查看 http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/。
或者看看这些屏幕录制
- 如何使用名为 git-flow 的可扩展 Git 分支模型(由 Build a Module 提供)
- git-flow 简介短片(由 Mark Derricutt 提供)
- 与 git-flow 一起前进(由 Dave Bock 提供)
(上述链接可在 https://github.com/nvie/gitflow 中找到)。
使用方法
在代码中定义您的菜单
在您的代码中(无论在哪里),通过插入如下注释定义一个 menu
// @menu <menu text>|<menu icon>|>sort order>
或者在 docblock 中
/**
* @menu <menu text>|<menu icon>|>sort order>
*/
例如:
// @menu Administration|icon-star|5
上面的行定义了一个标题为 "Administration" 的菜单,Twitter Bootstrap 的起始图标,排序顺序为 5(即它排在 0、1、2、3 和 4 之后)。
菜单项以类似的方式插入到您的代码中
// @menuitem <menu>|<item text>|<item icon>|<route>|<permissions>|<sort order>
或者
/**
* @menuitem <menu>|<item text>|<item icon>|<route>|<permissions>|<sort order>
*/
例如:
// @menuitem Administration|List Users|icon-user|list-users|user.list|3
这定义了一个在 "Administration" 菜单下的菜单项,文本为 "List Users",Twitter Bootstrap 的 "user" 图标,路由到 "list-users",需要 "user.list" 权限,并且排序顺序为 3。
以上两个示例结合给出一个看起来像这样的菜单
+------------------+
| * Administration |
+------------------+
| x List Users |
+------------------+
(其中 'x' 是用户图标)。
生成菜单
菜单通过 artisan 命令生成
php artisan menu:make
此命令将扫描您的源文件,提取所有 @menu 和 @menuitem 行,解析它们,并写入一个配置文件:app/config/menus.php。
然后,该配置将在运行时用于生成菜单。
使用 menubuilder
menubuild 提供了一个生成适当菜单的方法:Menubuilder::build()。
我在默认视图组合器中使用它,以确保每个页面自动构建菜单
View::composer('*',function($view){
// add the menus (if any)
$view->with('menus', Menu::build());
// add other stuff here...
});
build() 方法返回一个看起来像这样的数组
Array
(
[Administration] => Array
(
[icon] => icon-star
[sort] => 5
[items] => Array
(
[0] => Array
(
[text] => List Users
[icon] => icon-user
[route] => list-users
[permission] => user.list
[sort] => 1
)
[1] => Array
(
[text] => Add New User
[icon] => icon-user
[route] => create-user
[permission] => user.edit
[sort] => 1
)
)
)
)
此菜单可以根据您的需要传递到视图中进行渲染。