yidas/yii2-nav-locator

用于识别活动菜单的 Yii 2 导航路由定位器

安装: 74

依赖: 0

建议者: 0

安全: 0

星标: 2

关注者: 1

分支: 0

开放问题: 0

类型:yii2-extension

1.0.0 2018-11-20 02:07 UTC

This package is auto-updated.

Last update: 2024-09-11 20:16:51 UTC


README

Yii 2 导航定位器


用于识别活动菜单的 Yii 2 导航路由定位器

Latest Stable Version Latest Unstable Version License

特性

  • 智能识别当前控制器动作的活跃导航

  • 多验证器用于组合活跃导航

  • 支持设置路由前缀

概要

演示

为 Yii 2 框架提供一个 3 层控制器动作路由结构

yii2/
├── controllers/           
    ├── data/      
        ├── ListController.php
        └── StructureSettingController.php
    ├── datacenters/            
        ├── ClusterSettingController.php
        └── ListController.php
    └── SiteController.php      

在全局导航菜单视图中,通过导航定位器编写活动条件

<?php
use yidas\NavLocator as Locator;
use yii\helpers\Url;
?>

<li class="treeview <?php if(Locator::in('data/')):?>active menu-open<?php endif ?>">
  <a href="#">
    <i class="fa fa-database"></i> <span>Data</span>
    <span class="pull-right-container">
      <i class="fa fa-angle-left pull-right"></i>
    </span>
  </a>
  <ul class="treeview-menu">
    <li class="<?php if(Locator::in('data/list')):?>active<?php endif ?>"><a href="<?=Url::to(['data/list'])?>"><i class="fa fa-circle-o"></i> Data List </a></li>
    <li class="<?php if(Locator::in('data/structure-setting')):?>active<?php endif ?>"><a href="<?=Url::to(['data/structure-setting'])?>"><i class="fa fa-circle-o"></i> Structure Setting </a></li>
  </ul>
</li>

<li class="treeview <?php if(Locator::in('datacenters/')):?>active menu-open<?php endif ?>">
  <a href="#">
    <i class="fa fa-server"></i> <span>Data Centers</span>
    <span class="pull-right-container">
      <i class="fa fa-angle-left pull-right"></i>
    </span>
  </a>
  <ul class="treeview-menu">
    <li class="<?php if(Locator::in('datacenters/list/')):?>active<?php endif ?>"><a href="<?=Url::to(['datacenters/list'])?>"><i class="fa fa-circle-o"></i> Node List </a></li>
    <li class="<?php if(Locator::in('datacenters/cluster-setting/')):?>active<?php endif ?>"><a href="<?=Url::to(['datacenters/cluster-setting'])?>"><i class="fa fa-circle-o"></i> Cluster Setting </a></li>
  </ul>
</li>

  • 示例 1 活跃 URI: data/listdata/list/action
  • 示例 2 活跃 URI: data/structure-settingdata/structure-setting/action
  • 示例 3 活跃 URI: datacenters/listdatacenters/list/action
  • 示例 4 活跃 URI: datacenters/cluster-settingdatacenters/cluster-setting/action

导航定位器甚至支持路由规则映射。如果你有一个规则 'test' => 'data/list',当你通过 test 路由进入时,导航定位器可以识别为 data/list

要求

此库需要以下内容

  • PHP 5.4.0+
  • Yii 2.0.0+

安装

通过 Composer 在您的 Yii2 项目中安装

composer require yidas/yii2-nav-locator

使用

is()

验证当前控制器动作是否完全匹配提供的路由

public static boolean is(string $route)

示例

假设 site/index 为当前控制器动作

use yidas\NavLocator as Locator;

Locator::is('site');            // False (Route `site` could not refer to a actual action)
Locator::is('site/');           // False (There is no difference between using a slash or not)
Locator::is('site/index');      // True  (Successfully match the same controller ID and same action ID)
Locator::is('site/index/');     // True 
Locator::is('site/other');      // False (Failed to match the same controller ID but the different action ID)
Locator::is('site/other/');     // False 

提供的路由需要精确定义,格式为 模块-ID/控制器-ID/动作-ID

in()

验证当前控制器动作是否位于提供的路由下

public static boolean in(string $route)

示例

假设 site/index 为当前控制器动作

use yidas\NavLocator as Locator;

Locator::in('site');            // True  (Current route `site/index` is indeed in `site` layer)
Locator::in('site/');           // True 
Locator::in('site/index');      // True  (Current route `site/index` is indeed the `site/index` layers)
Locator::in('site/index/');     // True 
Locator::in('site/other');      // False (Current route `site/index` is not in `site/other` layers)
Locator::in('site/other/');     // False 
Locator::in('si');              // False (Current route `site/index` is not in `si` layer, `site` != `si`)
Locator::in('si/');             // False 
Locator::in('site/index/index');// False (This route means `site` module with `index` controller and `index` action)

提供的路由将通过每个分隔符分割成独立的精确路由层,让您区分当前控制器动作是否属于父导航。

setPrefix()

设置前缀路由以简化声明后续定位器路由

public static self setPrefix(string $prefix)

示例

<?php
use yidas\NavLocator as Locator;
?>

<li class="treeview <?php if(Locator::setPrefix('data/')->in('/')):?>active menu-open<?php endif ?>">
  <a href="#">
    <i class="fa fa-database"></i> <span>Data</span>
    <span class="pull-right-container">
      <i class="fa fa-angle-left pull-right"></i>
    </span>
  </a>
  <ul class="treeview-menu">
    <li class="<?php if(Locator::in('list/')):?>active<?php endif ?>"><a href="<?=Url::to(['data/list'])?>"><i class="fa fa-circle-o"></i> Data List </a></li>
    <li class="<?php if(Locator::in('structure-setting/')):?>active<?php endif ?>"><a href="<?=Url::to(['data/structure-setting'])?>"><i class="fa fa-circle-o"></i> Structure Setting </a></li>
  </ul>
</li>

<li class="treeview <?php if(Locator::setPrefix('datacenters/')->in('/')):?>active menu-open<?php endif ?>">
  <a href="#">
    <i class="fa fa-server"></i> <span>Data Centers</span>
    <span class="pull-right-container">
      <i class="fa fa-angle-left pull-right"></i>
    </span>
  </a>
  <ul class="treeview-menu">
    <li class="<?php if(Locator::in('list/')):?>active<?php endif ?>"><a href="<?=Url::to(['datacenters/list'])?>"><i class="fa fa-circle-o"></i> Node List </a></li>
    <li class="<?php if(Locator::in('cluster-setting/')):?>active<?php endif ?>"><a href="<?=Url::to(['datacenters/cluster-setting'])?>"><i class="fa fa-circle-o"></i> Cluster Setting </a></li>
  </ul>
</li>

您可以通过不带参数调用它来重置前缀: \yidas\NavLocator::setPrefix()