Yii CMenu小部件-如何获得主页


Yii CMenu Widget - How to Get Home Page

我在Yii(我使用它的第一个项目)中放置了一个菜单,如下所示:

$this->widget('zii.widgets.CMenu',array(
    'items'=>array(
        array('label'=>'Home', 'url'=>array('/')),
        array('label'=>'Examples', 'url'=>array('/examples')),
        array('label'=>'Contact', 'url'=>array('/contact')),
        array('label'=>'FAQ', 'url'=>array('/faq')),
        array('label'=>'Blog', 'url'=>array('/blog')),
        array('label'=>'Order', 'url'=>array('/order')),
    ),
));

每一个URL路径,比如/examples都是在我的配置中定义的路由,这样它就不会看起来像site/examples

对于Home链接,我正试图让它链接到网站的根级别。显然,CMenu小部件首先通过html::normalizeUrl()传递URL,最终使其指向当前页面。因此,如果我在示例页面,主链接指向/examples

这是normalizeUrl()说它做的:

如果输入参数为空字符串,则返回当前请求的URL。

如果输入参数是一个非空字符串,它将被视为一个有效的URL,并将不做任何更改返回。

如果输入参数是一个数组,它将被视为一个控制器路由和一个GET参数列表,并调用CController::createUrl方法来创建一个URL。

我已经尝试传递一个空字符串,它最终指向当前请求URL的预期。我试过通过"/"这是一个非空字符串,它仍然指向当前请求的URL。我也试过传递一个数组,它死于trim() expects parameter 1 to be string, array given,因为CMenu期待一个字符串。

我正在尝试用Yii的方式来做事情,但如果它不能解决像返回主页这样简单的事情,我真的很想让菜单保持静态。

TL;DR如何使Yii中的CMenu小部件创建指向"/"的链接?或者到基域?

当你使用array作为url时,它将尝试根据你的路由器配置创建url,但如果你将string作为参数传递,它将按字面传递,即:

$this->widget('zii.widgets.CMenu',array(
    'items'=>array(
        // Root hardcoded
        array('label'=>'Home', 'url'=>'/'),
        // Root dynamic (works also if not in domain root)
        array('label'=>'Home', 'url'=>Yii::app()->baseUrl),
        // External url
        array('label'=>'Examples', 'url'=> 'http://example.com/'),
        // current url
        array('label'=>'Contact', 'url'=> ''),
        array('label'=>'FAQ', 'url'=>array('/faq')),
        array('label'=>'Blog', 'url'=>array('/blog')),
        array('label'=>'Order', 'url'=>array('/order')),
    ),
));

array('label'=>'Home', 'url'=>Yii::app() -> request -> baseUrl)

另一个选项

array('label'=>'Home', 'url'=>Yii::app()->homeUrl)

如果你的baseUrl不是你的homeUrl,这有助于

获取一个绝对的webroot url,并删除http[s]://

array('label'=>'Home', 'url'=>Yii::app()->getBaseUrl(true)),