0

实际上在使用 TbMenu 小部件时 url 路由存在一些问题,我在访问模块控制器时使用 /moduleId/ControllerId/ActionId 的格式,这是一个示例

<?php  $this->widget('bootstrap.widgets.TbNavbar', array(
'type'=>'inverse', // null or 'inverse'
'brand'=>'mysite',
'brandUrl'=>'#',
'collapse'=>true, // requires bootstrap-responsive.css
'items'=>array(
    array(
        'class'=>'bootstrap.widgets.TbMenu',
        'items'=>array(
            array('label'=>'Home','url'=>array('/site/index'), 'active'=>true),
            array('label'=>'About', 'url'=>array('/site/page')),
            array('label'=>'Contact us','url'=>array('/site/contact')),
        ),
    ),
    '<form class="navbar-search pull-left" action=""><input type="text" class="search-query span2" placeholder="Search"></form>',
    array(
        'class'=>'bootstrap.widgets.TbMenu',
        'htmlOptions'=>array('class'=>'pull-right'),
        'items'=>array(
            array('label'=>'Sign in', 'url'=>'/user/auth','visible'=>Yii::app()->user->isGuest),
            '---',
           [b] array('label'=>'Profile', 'url'=>'/user/user','visible'=>!Yii::app()->user->isGuest, 'items'=>array([/b]
                [b]array('label'=>'Settings', 'url'=>'user/user/index'),[/b]
                [b]array('label'=>'Logout', 'url'=>'user/user/logout')[/b],

            )),
        ),
    ),
),

最后三行是导致问题的原因,当我在点击主页、页面、联系我们(使用由 Yii 自动生成的站点控制器操作)后尝试访问这些链接时,路由被附加到现有的url 而不是为模块创建一个新的 url,例如,如果我在主页上(点击主页后它有这个作为 url localhost/mysite/index.php/site/index)**它给了我这个 url localhost/mysite /index.php/site/index/user/user/index,如果我再次使用这个作为 url 的相同链接,它会给我 **localhost/mysite/index/user/user/index/user/user/index如果我再次单击它会一次又一次地添加另一个..但最奇怪的是它与CMenu一起工作正常,这是CMenu的片段,工作正常,

<?php $this->widget('zii.widgets.CMenu',array(
                    'items'=>array(
                            array('label'=>'Home', 'url'=>array('/site/index')),
                            array('label'=>'About', 'url'=>array('/site/page', 'view'=>'about')),
                            array('label'=>'Contact', 'url'=>array('/site/contact')),
                            array('label'=>'Login', 'url'=>array('//user/auth'), 'visible'=>Yii::app()->user->isGuest),
                            array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('//user/user/logout'), 'visible'=>!Yii::app()->user->isGuest),
                            array('label'=>'My profile ', 'url'=>array('/user/user/'), 'visible'=>!Yii::app()->user->isGuest),
                    ),
            )); ?>

我假设这可能是由于这些链接是子菜单这一事实引起的,但我不确定,因为这些链接中的第一个不是子菜单并且有同样的问题!再次感谢

4

1 回答 1

2

TbMenu 组件使用 CHtml::link 来显示链接...

CHtml::link(label, url, options)

CHtml::link 方法有一个检查

if url is an array ... then use controller->createUrl(...) method
if url is a string ... then just return that string.

所以,我认为,@dInGd0nG 的建议会奏效。如果不是,那么你应该使用数组......类似的东西(不要忘记前缀 / )

array('label'=>'Settings', 'url'=> array('/user/user/index') ),
array('label'=>'Logout', 'url'=> array('/user/user/logout') )
于 2012-09-25T06:48:10.700 回答