Php 如何根据正在调用的当前控制器(可能使用CMap)来管理Yii菜单项?
我有这样一个主菜单:Php 如何根据正在调用的当前控制器(可能使用CMap)来管理Yii菜单项?,php,multidimensional-array,yii,array-merge,Php,Multidimensional Array,Yii,Array Merge,我有这样一个主菜单: $main= array( array('label'=>'Main Menu'), array('label'=>'Posts', 'icon'=>'list', 'url'=>array('post/index') ), '--', array('label'=>'Comments', 'icon'=>'comment', 'url'=>array('comment/index')), );
$main= array(
array('label'=>'Main Menu'),
array('label'=>'Posts', 'icon'=>'list', 'url'=>array('post/index') ),
'--',
array('label'=>'Comments', 'icon'=>'comment', 'url'=>array('comment/index')),
);
在Posts控制器中,我在Posts中构建一个子菜单,例如
$submenu= array(
array('label'=>'All Posts', 'icon'=>'list-alt', 'url'=>array("post/index")),
array('label'=>'Create Post', 'icon'=>'plus', 'url'=>array("post/create")),
);
我有一个函数,可以根据
来自$main数组的url'url'=>数组('post/index')
e、 g
输出:
$main= array(
array('label'=>'Main Menu'),
array('label'=>'Posts', 'icon'=>'list', 'url'=>array('post/index'),
'items'=>array(
array('label'=>'All Posts', 'icon'=>'list-alt', 'url'=>array("post/index")),
array('label'=>'Create Post', 'icon'=>'plus', 'url'=>array("post/create")),
);
),
'--',
array('label'=>'Comments', 'icon'=>'comment', 'url'=>array('comment/index')),
);
因此,我们的想法是在运行时除了主菜单项之外插入子菜单$菜单是全球性的,
而$子菜单是在控制器中定义的
我不确定这是不是最好的办法
有没有更好的方法或者Yii提供一些内置类来有条件地合并数组
我检查了CMap类,但没有提供任何此类功能
您建议如何改进这段代码
关于我之所以选择它,是因为没有命名键,它不是一个关联数组,而是一个普通数组,因此任何数组合并只会附加新项。你说得对,最外层的数组是非关联的。我只是想知道最好的解决方案,例如使用class、lib等。根据用户体验,最好的解决方案是根本不根据请求修改导航,而是有两个单独的导航,如站点(或常规导航)和上下文导航。
$main= array(
array('label'=>'Main Menu'),
array('label'=>'Posts', 'icon'=>'list', 'url'=>array('post/index'),
'items'=>array(
array('label'=>'All Posts', 'icon'=>'list-alt', 'url'=>array("post/index")),
array('label'=>'Create Post', 'icon'=>'plus', 'url'=>array("post/create")),
);
),
'--',
array('label'=>'Comments', 'icon'=>'comment', 'url'=>array('comment/index')),
);