Я не могу заставить Pjax работать с Laravel. Я перепробовал все, но лезвие шаблонов все испортило. Когда я не использую лезвие, я могу заставить его работать.
В результате происходит загрузка страницы AJAX, а затем, к сожалению, происходит перенаправление на тот же URL-адрес. Так что страница загружается дважды.
Я понятия не имею, как модифицировать шаблонизатор лезвий, чтобы приспособить его к Pjax и подавить загрузку второй страницы. У кого-нибудь есть какие-нибудь подсказки?
Как вы расширяете свои макеты? Для правильной работы PJAX вам необходимы два макета — один со всеми вашими сценариями и так далее, а другой просто отображает запрашиваемое представление.
приложение / Провайдеры / AppServiceProvider.php
public function boot() {
view()->share('layout', 'layouts.main');
}
Приложение / Промежуточный / PjaxCheck.php
public function handle($request, Closure $next)
{
if ($request->pjax())
{
view()->share('layout', 'layouts.pjax');
}
return $next($request);
}
(не забудьте добавить это к вашему Kernel
)
ресурсы / виды / макеты / main.blade.php
<html>
<body>
@yield('content')
</body>
</html>
ресурсы / виды / макеты / pjax.blade.php
@yield('content')
Посмотреть
@extends($layout)
@section('content')
Some html content
@endsection
По существу в AppServiceProvider
Вы говорите, каждый взгляд, что $layout
вар должен по умолчанию layouts.main
, В промежуточном программном обеспечении Pjax вы перезаписываете эту переменную layouts.pjax
вместо.
Оригинальный постер здесь. Эта проблема с множественной загрузкой вызвана медленной Homestead / vagrant. Если вы установите timeout
опция на PJAX для 3500
(мс), тогда вы не столкнетесь с этой проблемой.
А для тех, кто обеспокоен тем, что 3,5-секундная загрузка страницы медленная и делает PJAX бесполезной, обратите внимание, что на производственном сервере, даже в микростанциях EC2, время загрузки вашего приложения Laravel будет в 10 раз меньше, чем в Vagrant, поэтому вы будете в 350
мс диапазона и не будет проблем с использованием PJAX по умолчанию 650
мс таймаут