html – Anchor Tag中的CakePHP Span标签

前端之家收集整理的这篇文章主要介绍了html – Anchor Tag中的CakePHP Span标签前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试让Cake PHP输出一个如下所示的链接
<a href="/foo/bar" class="some other classes">
     <span class="icon new"></span>FooBar</a>

所以我在视图中使用以下代码

<?PHP 
echo $this->Html->link(
$this->Html->tag('span',null,array('class' => 'icon new')) . "FooBar",array('controller' => 'foo','action' => 'bar'),array('class' => 'some other  classes','escape' => false)
     );
?>

但CakePHP输出如下:

<a href="/foo/bar" class="some other classes">
     <span class="icon new">FooBar</span></a>

这打破了我的设计.如何在< span>之后让CakePHP附加“FooBar”标签

编辑:还值得一提的是我知道< span>标签通常不应该在锚标签内,但在必须的情况下.

解决方法

您需要使用空字符串而不是null作为span的文本,然后您的代码将按预期工作.

查看HtmlHelper的源代码,null被视为“特殊”值,只会创建跨度的开始标记.你可以在这一行看到这个:

https://github.com/cakephp/cakephp/blob/2.3.2/lib/Cake/View/Helper/HtmlHelper.php#L906

将您的代码更改为此代码应该可以正常工作;

echo $this->Html->link(
    $this->Html->tag('span','','escape' => false)
);

关闭< / span>的附加说明

对于那些想知道的人,有点解释:

结束< / span>在你的例子中,实际上不存在于CakePHP生成输出中,但是由浏览器自动添加”.如果您在浏览器中查看HTML的来源,您会发现这实际上是HTML中的内容

<a href="/foo/bar" class="some other classes">
 <span class="icon new">FooBar</a>

如你所见,没有关闭’跨度’

因为< span>未关闭,浏览器将尝试更正此错误自动假设您“忘记”关闭它.因此,它将添加一个结束< / span>在它找到的下一个标记之前(在这种情况下是结束< / a>).

浏览器中的“检查器”将始终显示浏览器用于呈现输出的HTML.这包括由浏览器和动态生成的元素(例如,通过JavaScript添加的元素)进行的自动更正.

要检查PHP脚本的输出,请始终查看源,而不是检查器

猜你在找的HTML相关文章