将路由器URL与CakePHP中的当前URL匹配

时间:2013-09-09 11:12:54

标签: php cakephp

我有以下代码列出了CakePHP中构建的博客的标签:

$tagsList = $this->requestAction('/tags/listTags');
foreach ($tagsList as $tagsListTag) {
    echo '<li'. strpos($this->here, Router::url(array('controller'=>'tags','action'=>'view','slug'=>$tagsListTag['Tag']['slug'])) ? ' class="selected"' : '' ).'>'.$this->Html->link($tagsListTag['Tag']['title'],array('controller'=>'tags','action'=>'view','slug'=>$tagsListTag['Tag']['slug']),array('class'=>'tag')).'</li>';
}

我添加了一些比较当前网址的逻辑,以及每个链接的路由器网址是什么,如果匹配,应该向selected添加<li>

然而它没有用,即使只回显$this->hereRouter::url显示它们是相同的!他们的其他问题在于我添加课程的方式吗?

1 个答案:

答案 0 :(得分:1)

首先,您的括号设置不正确,您的代码段会产生解析器错误。我认为这个错误只存在于这个代码示例中?看起来应该是这样的:

'<li' . (strpos($this->here, Router::url(array(...))) ? ' class="selected"' : '') . '>'

另一个问题是strpos可以返回0needle位于0的{​​{1}}}以及布尔{{1} } {(未找到haystack),并且由于false的计算结果为false(请参阅http://php.net/manual/en/language.types.boolean.php),如果网址与第一个字符匹配,您的情况将会失败。

所以你要么也要测试needle,要么不同地比较这些值。在测试网址时,您最有可能希望匹配确切的网址,因此您只需使用比较运算符0

0

如果您只需要匹配部分网址,则可以使用===并严格按照$this->here === Router::url(...) 进行匹配:

strpos

这将匹配确切的网址,以及以0开头的所有网址。