2013-03-05 51 views
5

有人可以解釋我爲什麼我用打印的字符串「@extends('layouts.default')」得到空白屏幕,如果我正常請求頁面(而不是ajax)?Laravel 4:如果葉片佈局中的聲明奇怪

@if(!Request::ajax()) 
    @extends('layouts.default') 
    @section('content') 
@endif 
Test 
@if(!Request::ajax()) 
    @stop 
@endif 

我試圖解決與阿賈克斯的問題,我不想爲每個請求類型2模板,也可以我想使用刀片的模板,因此使用控制器的佈局,我不工作。我如何在刀片模板中執行此操作?我在看這Laravel: how to render only one section of a template?

順便說一下。如果我用ajax請求它,它應該像它應該那樣工作。

回答

9

是@extends必須是1號線。

而且我發現解決方案PJAX 。一開始我不確定這可以解決我的問題,但它確實如此。不知道爲什麼我害怕失去刀片功能,如果你真的不能這樣失去它的話。如果有人使用PJAX,需要使用一個模板,有和沒有的佈局,這可能是您的解決方案:

protected $layout = 'layouts.default'; 

public function index() 
{ 
    if(Request::header('X-PJAX')) 
    { 
    return $view = View::make('home.index') 
     ->with('title', 'index'); 
    } 
    else 
    { 
    $this->layout->title = 'index'; 
    $this->layout->content = View::make('home.index'); 
    } 
} 
+0

請將您自己的答案標記爲已接受,以便其他人可以看到它是正確的答案。 – 2013-03-06 04:37:52

+0

21小時後我才能接受我自己的答案。 – 2013-03-06 15:39:46

+0

我看到了 - 我的歉意。 – 2013-03-06 17:01:47

3

嘗試將@extends移動到第1行,您將看到刀片模板將正確渲染。

至於解決ajax問題,我認爲把邏輯移回你的控制器會更好。

例子:

… 
if (Request::ajax()) 
{ 
    return Response::eloquent($books); 
} else { 
    return View::make('book.index')->with('books', $books); 
} 
… 

看看這個線程的詳細信息:http://forums.laravel.io/viewtopic.php?id=2508

+0

問題如果是Ajax請求,我不需要渲染布局。我需要純數據的HTML視圖。所以不知何故,我需要轉向佈局渲染。我知道我可以使用控制器佈局來實現,但我也想使用刀片功能。 – 2013-03-05 14:57:09

3

您仍可以運行你的病情的拳頭線人手不夠,像這樣

@extends((Request::ajax())?"layout1":"layout2")