coreplex/navigator

一个与框架无关的导航包,用于处理导航项的激活状态和权限

v0.1.5 2018-04-23 14:29 UTC

This package is auto-updated.

Last update: 2024-09-20 02:47:44 UTC


README

一个PHP 5.4+的包,用于创建导航菜单,并处理激活和权限。

安装

此包需要PHP 5.4+,并包含Laravel 5 Service Provider和Facade。

我们建议通过composer安装此包。您可以在命令行中调用composer require coreplex/navigator,或者将其添加到composer.json中,然后运行composer installcomposer 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;