我使用Laravel 4.2通过HTTPS开发应用程序,并使用安全路由和重定向。我使用Paginator对结果进行分页,但是视图中呈现的链接指向http页面,我们如何强制Paginator生成https链接?
答案 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上正常工作。