为什么我们需要CakePHP HTML Link助手?

时间:2013-06-13 19:25:03

标签: cakephp cakephp-2.0

我正在教自己CakePHP框架。我看到CakePHP附带了一堆帮助程序,例如HTML帮助程序。在文档中,我看到你可以写

echo $this->Html->link('Enter', '/pages/home', array('class' => 'button', 'target' => '_blank'));

它将显示

<a href="/pages/home" class="button" target="_blank">Enter</a>

这位助手到底得到了什么?两者似乎都很容易写。

2 个答案:

答案 0 :(得分:2)

在评论中,乔治已经提到了documentation的摘录:

  

HtmlHelper在CakePHP中的作用是制作与HTML相关的选项   更容易,更快速,更有弹性。使用这个助手会   使您的应用程序更轻松,更轻松   灵活地放置相对于域根的位置。

但是这又错过了另一个非常重要的观点:如果你想要to use routing,你将无法使用它而不使用HtmlHelper的数组符号。

您的代码

echo $this->Html->link('Enter', '/pages/home', array('class' => 'button', 'target' => '_blank'));

不适用于路由。 您总是应该使用数组符号来获取您网站上的链接。所以你想要:

echo $this->Html->link('Enter', array('controller' => 'pages', 'action' => 'home'), array('class' => 'button', 'target' => '_blank'));

使用帮助程序的另一个可靠理由是,当应用程序未设置为在主机的根目录中工作时,会正确生成指向您应用程序的链接。

答案 1 :(得分:0)

HTML帮助程序中的link方法非常方便,可以避免在视图中对URL进行硬编码。具有...

<a href="/shop_products/view/1">Product Name</a>

...如果你在路线文件中添加一个自定义路线来处理上面的/t-shirts/blue-t-shirt之类的东西,那就不好了。而如果您使用数组语法...

<?php echo $this->Html->link('Product Name', array(
    'controller' => 'shop_products',
    'action' => 'view',
    $product['ShopProduct']['id']
)); ?>

...然后HTML路由将使用反向路由并根据需要删除URL格式。不再更新应用程序视图中的链接URL。