2

I am teaching myself the CakePHP framework. I see that CakePHP comes with a bunch of helpers, for example, the HTML helper. In the docs, I see that you can write

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

and it will display

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

What exactly has this helper gained us? Both seem to be equally easy to write.

4

2 回答 2

2

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

CakePHP 中 HtmlHelper 的作用是使与 HTML 相关的选项更容易、更快、更灵活地更改。使用这个帮助器将使您的应用程序更加轻松,并且在相对于域根的位置上更灵活地放置它。

但这遗漏了另一个非常重要的一点:如果您想使用路由,则如果不使用 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'));

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

于 2013-06-13T20:16:54.557 回答
0

HTML 帮助器中的link方法可以方便地避免在视图中对 URL 进行硬编码。有……</p>

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

…如果你在你的路由文件中添加一个自定义路由来处理上面的类似/t-shirts/blue-t-shirt. 而如果你使用数组语法……</p>

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

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

于 2013-06-13T20:53:41.433 回答