代码之家  ›  专栏  ›  技术社区  ›  Eliethesaiyan

Yii使用Yii引导程序将新路由添加到url中的现有路由,但使用CMenu可以很好地工作

  •  0
  • Eliethesaiyan  · 技术社区  · 12 年前

    在使用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/myste/index/user/user/inindex/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),
                        ),
                )); ?>
    

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

    1 回复  |  直到 12 年前
        1
  •  2
  •   SuVeRa    12 年前

    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') )