首先源菜单使用到了dmstr\widgets\Menu, 在里面有一个方法isItemActive就是控制高亮显示的,由于源代码中存在private属性,不好继承,所以可以直接复制一份,比如放在common\components\BackendLeftMenu下,然后修改isItemActive。
protected function isItemActive($item)
{
if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) {
$route = $item['url'][0];
if (isset($route[0]) && $route[0] !== '/' && Yii::$app->controller) {
$route = ltrim(Yii::$app->controller->module->getUniqueId() . '/' . $route, '/');
}
$route = ltrim($route, '/');
// 原来的代码
/*if ($route != $this->route && $route !== $this->noDefaultRoute && $route !== $this->noDefaultAction) {
return false;
}*/
// 新的代码
$routeControllerArr = explode('/', $route);
$routeController = '';
if(count($routeController) > 0) {
$routeController = $routeControllerArr[0];
}
if ($routeController != Yii::$app->controller->id && $route !== $this->noDefaultRoute && $route !== $this->noDefaultAction) {
return false;
}
unset($item['url']['#']);
if (count($item['url']) > 1) {
foreach (array_splice($item['url'], 1) as $name => $value) {
if ($value !== null && (!isset($this->params[$name]) || $this->params[$name] != $value)) {
return false;
}
}
}
return true;
}
return false;
}