Anchor标签内的CakePHP跨度标签

ahj*_*n25 5 html css cakephp

我正在尝试让CakePHP输出一个如下所示的链接:

 <a href="/foo/bar" class="some other classes">
     <span class="icon new"></span>FooBar</a>
Run Code Online (Sandbox Code Playgroud)

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

    <?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)
     );
?> 
Run Code Online (Sandbox Code Playgroud)

但CakePHP输出如下:

<a href="/foo/bar" class="some other classes">
     <span class="icon new">FooBar</span></a>
Run Code Online (Sandbox Code Playgroud)

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

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

tha*_*tah 5

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

查看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', '', array('class' => 'icon new')) . "FooBar",
    array('controller' => 'foo', 'action' => 'bar'),
    array('class' => 'some other  classes', 'escape' => false)
);
Run Code Online (Sandbox Code Playgroud)

关闭的补充说明 </span>

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

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

<a href="/foo/bar" class="some other classes">
 <span class="icon new">FooBar</a>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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