hailwood/knp-menu-laravel4

此包提供了KnpMenu库与Laravel的集成。

安装: 61

依赖者: 0

建议者: 0

安全: 0

类型:laravel-package

v2.0.0 2014-09-26 22:34 UTC

This package is auto-updated.

Last update: 2024-09-09 02:57:54 UTC


README

Magnum CI

提供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'))
;

这还允许我们正确标记当前活动的菜单项是哪个路由。

更多文档即将推出!