PHP:生成Laravel Paginator Secure(HTTPS)链接

时间:2015-03-01 18:50:13

标签: laravel https paginator

我使用Laravel 4.2通过HTTPS开发应用程序,并使用安全路由和重定向。我使用Paginator对结果进行分页,但是视图中呈现的链接指向http页面,我们如何强制Paginator生成https链接?

3 个答案:

答案 0 :(得分:13)

我今天遇到了这个问题并找到了这个全球解决方案。

在您的AppServiceProvider :: boot方法中,您可以添加以下内容以强制分页链接上的https

$this->app['request']->server->set('HTTPS','on');

答案 1 :(得分:4)

如果您的当前页面是通过HTTPS提供的,那么生成的分页URL应该使用该架构。

但是,如果您使用的代理未传递正确的标头,那么负责确定连接是否安全的Request类可能不会报告它。要确定请求是否被检测为安全使用Request::secure()。如果返回false,请尝试使用Laravel Trusted Proxies

如果这不起作用,您可以强制使用setBaseUrl的分页网址,如下所示:

$results->paginate();
$results->setBaseUrl('https://' . Request::getHttpHost() . '/' . Request::path());

答案 2 :(得分:0)

ZurbPresenter.php中添加自定义演示者app/helpers/(您可以将其放置在其他目录中,前提是其路径包含在ClassLoader::addDirectories()中)

<?php
class ZurbPresenter extends Illuminate\Pagination\Presenter {

    /**
     * Get HTML wrapper for a page link.
     *
     * @param  string  $url
     * @param  int  $page
     * @param  string  $rel
     * @return string
     */
    public function getPageLinkWrapper($url, $page, $rel = null)
    {
        $rel = is_null($rel) ? '' : ' rel="'.$rel.'"';

        if (strpos($url, "http://") === 0) {
            $url = "https://" . ltrim($url, "http://");
        }

        return '<li><a href="'.$url.'"'.$rel.'>'.$page.'</a></li>';
    }

    /**
     * Get HTML wrapper for disabled text.
     *
     * @param  string  $text
     * @return string
     */
    public function getDisabledTextWrapper($text)
    {
        return '<li class="disabled"><span>'.$text.'</span></li>';
    }

    /**
     * Get HTML wrapper for active text.
     *
     * @param  string  $text
     * @return string
     */
    public function getActivePageWrapper($text)
    {
        return '<li class="active"><span>'.$text.'</span></li>';
    }

}

请注意,getPageLinkWrapper()具有将http替换为https的逻辑。

创建一个视图文件以使用演示者。在app/views内创建一个文件zurb_pagination.php,内容如下:

<?php
    $presenter = new ZurbPresenter($paginator);

    $trans = $environment->getTranslator();
?>

<?php if ($paginator->getLastPage() > 1): ?>
    <ul class="pager">
        <?php
            echo $presenter->getPrevious($trans->trans('pagination.previous'));

            echo $presenter->getNext($trans->trans('pagination.next'));
        ?>
    </ul>
<?php endif; ?>

最后更改您的应用程序配置,以使用app\config/view.php中的新演示者进行分页:

'pagination' => '_zurb_pagination_simple',

我在网站上使用了类似的方法,您可以验证它在here上正常工作。