Используя код из этого вопроса ,
@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 .