Laravel - Как НЕ использовать макет

Я использую laravel с расположением контроллеров. Но есть некоторые части моего приложения, где я не хочу использовать макет (например, при возврате данных в запрос платежного шлюза, для которого я отправляю XML-данные). Я просто хочу передавать данные в свое представление и отображать их самостоятельно, без необходимости в макете.

Как я могу это сделать? Я пробовал некоторые подходы, но ни один из них не работал для этого. Я могу успешно изменить макет для рендеринга, но я не могу настроить рендеринг представления без макета.

Спасибо!

Изменить: позвольте мне объяснить это лучше

Мой макет по умолчанию установлен в Base_Controller. Затем все мои контроллеры расширяют его, но в одном из них мне не нужна раскладка, как я сказал выше. Может быть, мне нужно отключить раскладку по умолчанию или что-то в этом роде, я не уверен.


person Phius    schedule 11.04.2013    source источник


Ответы (3)


Вы можете просто вернуть что-то из действия вашего контроллера, чтобы обойти макет.

function get_xml($id) {
    $user = User::find($id);
    return View::make('user.xml', $user);
}
person Phill Sparks    schedule 11.04.2013
comment
У вас есть views/user/xml.php (или blade.php)? По крайней мере, вы знаете, что это определенно что-то обошло! :D - person Phill Sparks; 12.04.2013
comment
Да. Но твой вопрос зажёг искру в моей голове, и я понял, что не так. Я тестировал файл представления, в котором были @section() и @endsection. После их удаления это, наконец, сработало: D Спасибо, чувак! - person Phius; 12.04.2013
comment
Если у вас есть макет, установленный в контроллере protected $layout = "page.layout";, следующий метод вернет представление макета. Это НЕ обходит макет. - person Shane; 17.04.2015
comment
@Shane Я подозреваю, что вы используете Laravel 4 или 5, этот вопрос и ответ касались Laravel 3. - person Phill Sparks; 17.04.2015

В ваших функциях контроллера вы можете просто вернуть строку, которая будет возвращена в браузер как есть. В качестве альтернативы вы можете создать объект Laravel\Response, который позволит вам более точно настроить вывод вашего сайта, чем просто возврат строки.

У класса Response в рукаве есть несколько хитростей, не упомянутых в документации: default return, JSON, принудительная загрузка.

Вас больше интересует первый, который позволит вам правильно установить тип содержимого ответа на application/xml. В дополнение к этому вы можете по-прежнему использовать представления для XML! Создайте представление, как если бы вы использовали View::make, но вместо того, чтобы возвращать его напрямую, сохраните его в переменной. Чтобы отрендерить его, вызовите на нем render() — он вернет вывод.

person Sébastien Renauld    schedule 11.04.2013

Простой способ....

предположим, что есть макет main

 <body>

        @yield('content')

</body>

Это content будет местом, куда будет вставлено представление.

Сейчас,

если вы хотите использовать макет, сделайте страницу просмотра такой:

@layout('main')

@section('content')
 blah blah your content
@endsection

Если вы не хотите использовать макет, пропустите приведенные выше коды.

В контроллере код будет одинаковым для обоих файлов.

 return View::make('index');
person itachi    schedule 11.04.2013
comment
OP использует макеты контроллера, а не макеты блейдов; так что это не относится. - person Phill Sparks; 12.04.2013
comment
@PhillSparks это удобный способ. в противном случае просто нужно добавить $this->layout='' и макет пропал.... - person itachi; 12.04.2013
comment
Да, хотя вам все равно нужно будет вернуть ответ в этот момент. - person Phill Sparks; 12.04.2013
comment
Нет, когда вы используете макеты контроллера, вам не нужно ничего возвращать, потому что контроллер будет использовать макет автоматически (даже если вы ничего не добавляете в макет). - person Phill Sparks; 12.04.2013
comment
@PhillSparks Это заблуждение. Вы должны вернуть ответ. Разница в том, что в макете блейда вы должны явно вернуть его, а в макете контроллера laravel сделает это за вас. - person itachi; 12.04.2013
comment
это то, что я сказал, контроллер будет использовать макет автоматически - если вы скажете некоторым людям, что вы должны вернуть ответ, тогда они будут думать, что должны использовать возврат в своих действиях . - person Phill Sparks; 12.04.2013