yidas / yii2-nav-locator
用于识别活动菜单的 Yii 2 导航路由定位器
1.0.0
2018-11-20 02:07 UTC
Requires
- yiisoft/yii2: ~2.0.0
This package is auto-updated.
Last update: 2024-09-11 20:16:51 UTC
README
Yii 2 导航定位器
用于识别活动菜单的 Yii 2 导航路由定位器
特性
-
智能识别当前控制器动作的活跃导航
-
多验证器用于组合活跃导航
-
支持设置路由前缀
概要
演示
为 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/list
,data/list/action
- 示例 2 活跃 URI:
data/structure-setting
,data/structure-setting/action
- 示例 3 活跃 URI:
datacenters/list
,datacenters/list/action
- 示例 4 活跃 URI:
datacenters/cluster-setting
,datacenters/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()