您需要使用空字符串代替null
作为跨度的文本,那么您的代码将按预期工作。
查看HtmlHelper的源代码,null
被视为“特殊”值,导致仅创建范围的开始标记。您可以在这一行中看到这一点:
https://github.com/cakephp/cakephp/blob/2.3.2/lib/Cake/View/Helper/HtmlHelper.php#L906 https://github.com/cakephp/cakephp/blob/2.3.2/lib/Cake/View/Helper/HtmlHelper.php#L906
将您的代码更改为此,它应该可以工作;
echo $this->Html->link(
$this->Html->tag('span', '', array('class' => 'icon new')) . "FooBar",
array('controller' => 'foo', 'action' => 'bar'),
array('class' => 'some other classes', 'escape' => false)
);
关闭的补充说明</span>
对于那些想知道的人来说,有一点解释:
The closing </span>
在你的例子中实际上是不存在在 CakePHP 生成的输出中,但由浏览器自动“添加”。如果您查看source在浏览器中查看 HTML 的内容,您将看到 HTML 中实际包含的内容如下:
<a href="/foo/bar" class="some other classes">
<span class="icon new">FooBar</a>
如你看到的,没有关闭“跨度”
因为<span>
未关闭,浏览器将尝试纠正此错误并自动假设您“忘记”关闭它。因此它会添加一个结束语</span>
在它找到的下一个标签之前(在这种情况下是结束标签)</a>
).
浏览器中的“检查器”将始终显示浏览器所识别的 HTMLuses渲染输出。这包括浏览器进行的自动更正and动态生成的元素(例如通过 JavaScript 添加的元素)。
要检查 PHP 脚本的输出,请始终查看source,不是检查员