【问题标题】:How to create a secure link (https) with CakePHP's HtmlHelper如何使用 CakePHP 的 HtmlHelper 创建安全链接 (https)
【发布时间】:2013-12-30 01:18:36
【问题描述】:

我到处寻找,但找不到如何使用 CakePHP 的 HtmlHelper 创建安全链接 (https)。

看起来这应该是一个简单的选择,但是……显然不是。

【问题讨论】:

    标签: cakephp ssl hyperlink cakephp-2.4


    【解决方案1】:

    最终只是扩展了 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。这可能会导致有关最终 URL 的奇怪结果。
    • @mark - 为什么我会通过'secure'=&gt;false?默认情况下,链接不是 https,并且“安全”不是普通助手的选项。似乎有点像说我没有考虑他们是否通过'dave'=&gt;'likes pizza',不是吗? (也许我错过了什么?)
    • 它是一个布尔值,就像 admin=>true/false 或任何其他值一样。所以 false 应该将其关闭 - 而不是在此处添加命名参数。只是说。
    • @mark - false 不是“应该”做任何事情 - 它根本不是 CakePHP 的选项。它不应该作为 true/false 布尔值提供 - 这只是一种解决方法,允许您使用 Helper 轻松创建 SSL 链接。旁注:我已将其更改为专门检查 === true,以防他们真的想将“安全”作为 URL 参数或其他东西传递。
    • 如果在不同的方法中使用 - 类似于 admin=>true/false - 可以启用和禁用 https。否则唯一的解决方法是从数组中删除密钥,这很烦人。您的修改仍然没有考虑到这一点。我只是指出了您的代码中的一个缺陷,如果在实际实现中被接受为答案,则应考虑该缺陷。无需自己进一步调整。无论哪种方式,我都会使用 isset() 并调用 unset()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多