Laravel 4 Проверка Ajax для включения XMLHttpRequest (из Magnific Popup)

Используя код из этого вопроса ,

@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 .