【发布时间】:2013-12-30 01:18:36
【问题描述】:
我到处寻找,但找不到如何使用 CakePHP 的 HtmlHelper 创建安全链接 (https)。
看起来这应该是一个简单的选择,但是……显然不是。
【问题讨论】:
标签: cakephp ssl hyperlink cakephp-2.4
我到处寻找,但找不到如何使用 CakePHP 的 HtmlHelper 创建安全链接 (https)。
看起来这应该是一个简单的选择,但是……显然不是。
【问题讨论】:
标签: cakephp ssl hyperlink cakephp-2.4
最终只是扩展了 HtmlHelper 并允许用户(我)将 '_secure'=>true 作为选项传递(见下文)。
当然,这可以扩展、清理……等等,但是 - 它非常适合我的目的。
自定义的“MyHtmlHelper”:
<?php
//app/View/Helper/MyHtmlHelper.php
App::uses('HtmlHelper', 'View/Helper');
class MyHtmlHelper extends HtmlHelper {
public function link($title, $url = null, $options = array(), $confirmMessage = false) {
if(!empty($url['_secure']) && $url['_secure'] === true) {
unset($url['_secure']);
$url = str_replace('http:', 'https:', parent::url($url));
}
return parent::link($title, $url, $options, $confirmMessage);
}
}
说明:
基本思想是它检查您是否已将“安全”作为选项传递给选项数组。如果这样做,它会强制链接为“full_base”(即带有http://...的完整 URL),然后将 URL 构建为字符串并将“http:”替换为“https:”
使用方法:
echo $this->Html->link('SSL LINK!', array(
'controller' => 'orders',
'action' => 'tickets',
'full_base' => true,
'secure' => true
));
提醒:
你必须告诉你的应用你想使用你的助手作为 HtmlHelper:
public $helpers = array(
'Html' => array('className' => 'MyHtml'),
);
【讨论】:
'secure'=>false?默认情况下,链接不是 https,并且“安全”不是普通助手的选项。似乎有点像说我没有考虑他们是否通过'dave'=>'likes pizza',不是吗? (也许我错过了什么?)
=== true,以防他们真的想将“安全”作为 URL 参数或其他东西传递。