hailwood / knp-menu-laravel4
此包提供了KnpMenu库与Laravel的集成。
Requires
- php: >=5.3.0
- illuminate/support: ~4.2.0
- knplabs/knp-menu: ~2.0
Requires (Dev)
- illuminate/console: 4.*
- illuminate/container: 4.*
- illuminate/http: 4.*
- illuminate/routing: 4.*
- illuminate/view: 4.*
- mockery/mockery: dev-master
- phpunit/phpunit: 3.7.*
This package is auto-updated.
Last update: 2024-09-09 02:57:54 UTC
README
提供Laravel 4与knplabs/knp-menu的集成。
此包是从一个现有的包neatqc/knp-menu派生出来的,该包似乎不再更新,而60%的工作来自该开发者。
特性
- 所有KnP-menu功能
- Laravel语法
- Laravel Facade支持
- Blade模板语言支持
- Laravel路由支持
安装
安装此包
由于它在packagist上注册,您可以简单地添加此laravel包。
在您的终端中执行以下行以安装它。
$ composer require 'hailwood/knp-menu-laravel4:~1.0'
添加服务提供者
在app.php
中,将Hailwood\KnpMenu\KnpMenuServiceProvider
添加到您的提供者数组中。
添加外观
在app.php
中,将'Menu' => 'Hailwood\KnpMenu\Facades\Menu'
添加到您的别名数组中。
添加菜单目录
我们需要在app路径中创建一个新的目录来存储菜单。默认情况下,在您的app目录中创建一个名为menus的新目录,它应该看起来像/app/menus
。
发布配置文件
如果我们想自定义菜单,我们需要发布配置文件。运行以下命令,它将在/app/config/packages/hailwood/knp-menu-laravel4/config.php
生成一个配置文件,您可以编辑它。
$ php artisan config:publish hailwood/knp-menu-laravel4
配置选项
视图
用于渲染菜单的视图名称。默认情况下,它使用/vendor/hailwood/knp-menu-laravel4/src/views/default.blade.php
。
您可以随意将此文件复制到您的视图目录。进行所需的更改,并在配置文件中更新值。
可以在运行时通过在根菜单对象上调用
->setExtra('view', 'view.name')
或通过将view' => 'view.name
作为渲染方法的第二个参数传递数组来更改视图。
字符集
渲染菜单时使用的字符集。我们默认使用UTF-8,因为它提供了最大的字符集,但如果您的页面使用不同的字符集,则可能需要更改此设置。
渲染器
可以用于解析上述模板的渲染引擎数组。
默认渲染器
用于解析上述模板的默认渲染器,如果未更改,我们将使用此渲染器。由于这是一个Laravel 4集成包,我们将其设置为合理的默认值blade
/
使用预定义菜单
可以在app/menus
目录中的文件中预定义菜单,这些文件遵循MenuNameMenu.php
命名约定。
这些菜单遵循以下通用模板
<?php
use Hailwood\KnpMenu\MenuBuilder;
class MenuNameMenu extends MenuBuilder
{
/**
* Returns an instance of the menu created by the builder.
*
* @return \Knp\Menu\ItemInterface
*/
public function create()
{
$menu = $this->factory->createItem('root');
return $menu;
}
}
但生成这些菜单的最简单方法是使用Artisan的强大功能
$ php artisan menu:make MenuName
可以在create()
方法中使用官方KnpMenu文档中的任何方法与菜单进行交互。
使用外观
可以使用我们之前注册的Menu::
外观与现有菜单进行交互,例如渲染菜单
<?php
echo Menu::render('MenuName');
如果您需要在渲染之前与菜单进行交互,可以使用Menu::get('MenuName')
来获取菜单,按照上述方式与它交互,然后渲染它。以下是一个示例
<?php
Menu::get('MenuName')->addChild('dog');
Menu::get('MenuName')->addChild('cat');
Menu::get('MenuName')->getChild('dog')->addChild('puppy');
echo Menu::render('MenuName');
动态生成菜单
我们知道您不一定在需要菜单之前就知道您的菜单是什么,或者您可能只想生成一个只在一个视图中使用的菜单。如果您想使用这些菜单,创建占位符菜单看起来有点脏,所以我们为您提供了一种动态生成它们的能力。
<?php
Menu::get('IDontExist')->addChild('birds');
看起来很熟悉!是的,如果使用get()
调用不存在菜单的名称,我们会立即为您创建它!
HTML菜单项
blade渲染器将'allow_safe_labels'
设置为true
,这意味着在任意菜单项上调用->setExtra('safe_label', true)
将阻止渲染器自动转义内容,这意味着可以使用原始HTML。
菜单和路由
此包与Laravel路由紧密集成。在菜单项上指定uri
而不是指定动作或路由在route
键中,我们将完成剩下的工作。这支持控制器动作或命名路由。
<?php
$menuItem
->addChild('Controller Action', array('route' => 'method@controller'))
->addChild('Named Route', array('route' => 'some.named.route'))
;
这还允许我们正确标记当前活动的菜单项是哪个路由。
更多文档即将推出!