我有以下代码列出了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->here
和Router::url
显示它们是相同的!他们的其他问题在于我添加课程的方式吗?
答案 0 :(得分:1)
首先,您的括号设置不正确,您的代码段会产生解析器错误。我认为这个错误只存在于这个代码示例中?看起来应该是这样的:
'<li' . (strpos($this->here, Router::url(array(...))) ? ' class="selected"' : '') . '>'
另一个问题是strpos
可以返回0
(needle
位于0
的{{1}}}以及布尔{{1} } {(未找到haystack
),并且由于false
的计算结果为false(请参阅http://php.net/manual/en/language.types.boolean.php),如果网址与第一个字符匹配,您的情况将会失败。
所以你要么也要测试needle
,要么不同地比较这些值。在测试网址时,您最有可能希望匹配确切的网址,因此您只需使用比较运算符0
:
0
如果您只需要匹配部分网址,则可以使用===
并严格按照$this->here === Router::url(...)
进行匹配:
strpos
这将匹配确切的网址,以及以0
开头的所有网址。