coreplex / navigator
一个与框架无关的导航包,用于处理导航项的激活状态和权限
Requires
- php: >=5.4.0
- coreplex/core: ~0.1
Requires (Dev)
- phpunit/phpunit: 4.8.*
README
一个PHP 5.4+的包,用于创建导航菜单,并处理激活和权限。
安装
此包需要PHP 5.4+,并包含Laravel 5 Service Provider和Facade。
我们建议通过composer安装此包。您可以在命令行中调用composer require coreplex/navigator
,或者将其添加到composer.json
中,然后运行composer install
或composer update
来下载包。
"coreplex/navigator": "~0.1"
Laravel 5集成
要使用此包与Laravel 5集成,首先将服务提供者添加到app/config/app.php
文件中的列表中。
'providers' => array( Coreplex\Core\CoreServiceProvider::class, Coreplex\Navigator\NavigatorServiceProvider::class, );
然后在命令行中运行php artisan vendor:publish
以发布配置。
注册菜单
要注册一个菜单,将其添加到navigator配置文件中的menus
数组中。要注册一个菜单,设置一个键以通过该键检索菜单,并将构建菜单的类作为值。
'menus' => [ 'foo' => 'Navigators\FooNavigator' ]
默认情况下,菜单类将使用名为design
的方法,但如果您想自己设置方法名,只需用@符号将类和方法名分开。
'menus' => [ 'foo' => 'Navigators\FooNavigator@bar' ]
有关创建菜单的详细信息,请参阅下面的创建菜单部分。
检索菜单
一旦注册了一个菜单,要检索它,请使用get
方法。
$menu = $navigator->get('foo');
创建菜单
要创建一个菜单,您需要返回一个嵌套的菜单项数组。每个项由一个URL、任何嵌套的菜单项以及任何希望该项拥有的属性组成。以下是一个示例。
class Sidebar { public function design() { return [ [ 'url' => '/', 'title' => 'Home', ], [ 'url' => 'about', 'title' => 'about', 'items' => [ [ 'url' => 'meet-the-team', 'title' => 'Meet The Team' ] ] ] ]; } }
这将向菜单中添加两个项;一个是主页,另一个是关于页面。关于页面也有嵌套项,因此我们可以在渲染时将其显示为下拉菜单。
URL不是必需的,但用于检查该项是否是活动项。
您可以为菜单项添加任何属性。在示例中已设置标题属性,但我们也可以在此处添加图标、类等,然后在渲染时访问该项。
过滤器
有时您可能需要仅在满足条件时显示菜单项;为此,请使用过滤器。
要注册一个过滤器,请将其添加到配置文件中的filters数组中,设置一个唯一的键作为键,并设置一个用作值的类。
'filters' => [ 'hasAccess' => 'Navigators\Filters\HasAccess' ]
默认情况下,过滤器类使用名为filter
的方法,但再次,如果您想指定方法,则用@符号将类和方法名分开。
'filters' => [ 'hasAccess' => 'Navigators\Filters\HasAccess@foo' ]
要在菜单项上调用过滤器,请向菜单项添加一个filter属性。
[ 'url' => '/admin', 'title' => 'admin', 'filter' => 'hasAccess', 'permission' => 'admin.access', ],
过滤器类上的方法将传递该项,您可以进行任何需要的检查。
use Coreplex\Navigator\Contracts\Item; class HasAccess { public function filter(Item $item) { if ($user->canAccess($item->permission) { return true; } return false; } }
渲染菜单
要渲染菜单,您有几个选项。您可以选择设置一个模板来渲染,或者访问菜单的属性。
使用模板渲染
要使用模板渲染,只需在菜单上调用render
方法。这将使用配置文件中设置的默认视图,或者您可以将要使用的模板的路径传递给render方法。
$menu = $navigator->get('foo'); $menu->render(); $menu->render('path/to/template.php');
此包提供了一个默认模板作为示例。
从菜单渲染
要访问菜单中的项,请使用items
方法或直接传递菜单给迭代器。
$items = $menu->items(); OR foreach ($menu as $item) { // }
一旦你获得了一个菜单项,你可以通过调用 isActive
方法来检查它是否是活动菜单项。
$item->isActive();
然后,你可以通过访问项目对象上的键来访问设置在该项上的任何属性。例如,如果你为该项设置了一个URL,那么我可以执行以下操作。
$item->url;