2013-02-08 96 views
1

Hi there stackoverflow!Laravel在Ajax请求中使用“@layout”

在我laravel观点我使用的是默认的布局通过调用

@layout('layouts.default') 

到同一控制器我发送Ajax请求但我不能把“如果”来如果@layout一个Ajax调用。因为如果Ajax请求对控制器产生了影响,它也会产生页眉,页脚和内容(页眉和页脚处于默认布局)。所以为了避免这种情况,我做了一个没有我的视图@layout的副本。

然而,编辑两个文件进行更改太无聊了。我不能一个代码添加到我的观点类似的东西?:

@if(!$ajaxrequest) 
@layout('layouts.master') 
@endif 

我想这是因为我的控制器代码太乱

+1

使用'Request :: ajax()'来确定请求是否是ajax请求。因为布局必须是视图中的第一件事,所以我建议将你的整个layouts.master文件包装在if语句中,比如'@if(!Request :: ajax())... layout ... @endif ' – David 2013-02-08 18:31:44

+1

在你的控制器中你应该使用'Request :: ajax()'然后有一个'view'使用特定的布局。那个'view'可以嵌套另一个'view'。嵌套的'view'可以是一个单独的模板来编辑,然后通过AJAX调用或非AJAX调用来使用。 – Cristian 2013-02-20 13:42:35

+0

这是Laravel 3还是Laravel 4? – rmobis 2013-03-02 03:34:21

回答

0

你不能有@layout通话if语句等之后即(见通知下红色的“刀锋模板”在docs。你必须设置public $layout并调用$this->layout->nest代替View::make(见“基础知识”链接到上面的网页)上。

0

你可以在你的视图模板中使用这样的东西:

@extends('layouts.' . (isset($layout) ? $layout : 'default')) 

如果将$ layout变量设置为需要的布局,还可以在您的控制器(或超级控制器)中检查AJAX请求。否则将采取“默认”布局。