Используя код из этого вопроса ,
@extends('layouts.' . isset($ajax) ? 'ajax' : 'master')
для проверки Ajax. Он работает для регулярных загрузок страниц Ajax, но не при использовании всплывающего окна.
В этом случае я использую режим Ajax в режиме Magnific Popup, заголовок запроса – XMLHttpRequest, но Laravel возвращает неаксиальный (расширенный) макет.
Прежде всего, я не знаю, как устанавливается переменная $ajax
( isset($ajax)
), но правильный способ проверить запрос ajax в Laravel
if(Request::ajax()) { // ... }
Или, короткая форма (с использованием тройного оператора в одном выражении)
$ajax = Request::ajax() ? true : false;
Итак, согласно вашей ссылке другого ответа, это должно работать
@extends(((Request::ajax()) ? 'layouts.ajax' : 'layouts.master'))
Как это работает?
В vendor\laravel\framework\src\Illuminate\Http
есть класс Request.php
вы можете видеть
/** * Determine if the request is the result of an AJAX call. * * @return bool */ public function ajax() { return $this->isXmlHttpRequest(); }
Здесь isXmlHttpRequest()
– это расширенный метод из класса Symphony
классе Request.php
, поскольку класс Request
Laravel
расширяет Symfony\Component\HttpFoundation\Request.php
и в этом классе существует основной метод, который определяет запрос ajax
посредством
public function isXmlHttpRequest() { return 'XMLHttpRequest' == $this->headers->get('X-Requested-With'); }
Итак, если X-Requested-With
заголовок запроса установлен, то это запрос ajax, и если этот заголовок не отправлен, это не запрос ajax
. Итак, вопрос заключается в том, как устанавливается isset($ajax)
, и если он задан вами, тогда библиотека jQuery
вы используете, не делает этого, но вместо этого отправляет X-Requested-With
заголовок запроса, и в этом случае вы должны использовать Метод Laravel
's Request::ajax()
для определения запроса ajax
.
Кстати, я бы предпочел использовать совершенно другое view
для запроса ajax
который не расширяет макет. Вам может понравиться This Detect Ajax Request-Php And Frameworks .