2013-02-08 71 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請求。否則將採取「默認」佈局。