Я разрабатываю приложение с использованием Laravel 4.2 через HTTPS с безопасными маршрутами и перенаправлениями. Я использую Paginator для разбивки результатов на страницы, но ссылки, отображаемые в представлении, указывают на страницы http, как мы можем заставить Paginator генерировать ссылки https?
PHP: создание ссылок Laravel Paginator Secure (HTTPS)
Ответы (3)
Сегодня у меня была эта проблема, и я нашел это глобальное решение.
В методе AppServiceProvider :: boot вы можете добавить следующее, чтобы принудительно использовать https для ссылок на страницы
$this->app['request']->server->set('HTTPS','on');
\URL::forceScheme('https')
, который, похоже, игнорирует разбиение на страницы. Спасибо.
- person andi79h; 13.03.2018
Если ваша текущая страница обслуживается по протоколу HTTPS, то сгенерированные URL-адреса разбивки на страницы должны использовать эту схему.
Однако, если вы используете прокси-сервер, который не передает правильные заголовки, класс Request
, отвечающий за определение того, является ли соединение безопасным, может не сообщать об этом как таковом. Чтобы определить, распознается ли запрос как безопасный, используйте Request::secure()
. Если это вернет false
, попробуйте использовать Laravel Trusted Proxies.
Если это не сработает, вы можете принудительно использовать URL-адреса для разбивки на страницы с помощью setBaseUrl
следующим образом:
$results->paginate();
$results->setBaseUrl('https://' . Request::getHttpHost() . '/' . Request::path());
Добавьте настраиваемого презентатора 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',
Я использую аналогичный подход для своего веб-сайта, и вы можете проверить его работу здесь.