PHP: Generate Laravel Paginator Secure (HTTPS) Links
我正在开发一个使用 Laravel 4.2 over HTTPS 的应用程序,带有安全路由和重定向。我正在使用Paginator对结果进行分页,但是视图中呈现的链接指向http页面,我们如何强制Paginator生成https链接?
我今天遇到了这个问题,并找到了这个全局解决方案。
在您的 AppServiceProvider::boot 方法中,您可以添加以下内容以在分页链接上强制 https
1
|
$this->app[‘request’]->server->set(‘HTTPS’,’on’);
|
- 这也适用于任何其他链接,因此我可以将它交换为似乎忽略分页的 \\URL::forceScheme(‘https’) 。谢谢。
如果您当前的页面是通过 HTTPS 提供的,那么生成的分页 URL 应该使用该架构。
但是,如果您使用的代理没有传递正确的标头,则负责确定连接是否安全的 Request 类可能不会报告它。要确定请求是否被检测为安全,请使用 Request::secure()。如果返回 false,请尝试使用 Laravel 可信代理。
如果这不起作用,您可以使用 setBaseUrl 强制分页 URL,如下所示:
1
2 |
$results->paginate();
$results->setBaseUrl(‘https://’ . Request::getHttpHost() . ‘/’ . Request::path()); |
- 对于 Laravel 5.1,可以使用 setPath 代替 setBaseUrl
在 app/helpers/ 中添加自定义演示者 ZurbPresenter.php(如果其路径包含在 ClassLoader::addDirectories() 中,您可以将其放在其他目录中):
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<?php
class ZurbPresenter extends Illuminate\\Pagination\\Presenter { /** if (strpos($url,”http://”) === 0) { return ‘ /** /** } |
请注意,getPageLinkWrapper() 具有将 http 替换为 https 的逻辑。
创建一个视图文件以使用演示者。在 app/views 中创建一个文件 zurb_pagination.php ,其内容如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php
$presenter = new ZurbPresenter($paginator); $trans = $environment->getTranslator(); <?php if ($paginator->getLastPage() > 1): ?> echo $presenter->getNext($trans->trans(‘pagination.next’)); <?php endif; ?> |
最后更改您的应用配置以使用 app\\config/view.php 中的新演示者进行分页:
1
|
‘pagination’ => ‘_zurb_pagination_simple’,
|
我对我的网站使用了类似的方法,您可以在此处验证它是否正常工作。
来源:https://www.codenong.com/28797590/