2015-10-02 42 views
0

我不能爲了我的生活讓Pjax與Laravel一起工作。我嘗試了一切,但刀片模板正在搞砸了。當我不使用刀片模板時,我可以使它工作。Laravel和PJAX

發生什麼是AJAX頁面加載,然後不幸的是,有一個重定向到同一個確切的URL。所以頁面加載兩次。

我不知道如何修改刀片模板引擎以適應Pjax並抑制第二頁加載。任何人有任何線索?

回答

1

原始海報在這裏。這種多次加載問題是由宅基地/流浪者緩慢造成的。如果您將PJAX上的timeout選項設置爲3500(ms),那麼您將不會遇到此問題。

對於那些擔心3.5秒的頁面加載速度慢並且使PJAX無用的請注意,在生產服務器上,即使是EC2的微型實例,Laravel應用加載時間將是Vagrant的1/10,將在350毫秒範圍內,並且使用PJAX和其默認的650毫秒超時將沒有問題。

1

你如何擴展你的佈局?您基本上需要兩種佈局才能使PJAX正常工作 - 一種使用所有腳本,另一種只顯示您請求的視圖。

應用/供應商/ AppServiceProvider.php

public function boot() { 
    view()->share('layout', 'layouts.main'); 
} 

應用/中間件/ PjaxCheck.php

public function handle($request, Closure $next) 
{ 
    if ($request->pjax()) 
    { 
     view()->share('layout', 'layouts.pjax'); 
    } 

    return $next($request); 
} 

(不要忘了將它添加到您的Kernel

resources/views/layouts/main.blad e.php

<html> 
    <body> 
     @yield('content') 
    </body> 
</html> 

資源/視圖/佈局/ pjax.blade.php

@yield('content') 

查看

@extends($layout) 
@section('content') 
    Some html content 
@endsection 

基本上AppServiceProvider你告訴每一個觀點$layout var應該默認爲layouts.main。在Pjax中間件中,您改爲用layouts.pjax覆蓋該變量。

+0

真的很棒的答案@亞歷克斯。我遇到的問題圍繞着'650ms'的默認pjax響應超時。有了Codeigniter,我從來沒有碰到過這種響應超時,但很遺憾,Laravel對我的大多數應用程序鏈接都是這樣。該應用程序沒有做任何特殊的事情,只是像許多其他應用程序訪問數據庫,所以不知道可以做什麼。將超時延長到「3000ms」確實解決了這個問題,但是這打破了PJAX的目的。 –

+0

這似乎有點......關閉!你有沒有嘗試用[Laravel Debugbar](https://github.com/barryvdh/laravel-debugbar)這樣的東西來分析你的應用,找出瓶頸在哪裏? – Alex

+0

這是我的個人資料:'啓動(493.21ms),應用程序(561.17ms),應用程序(26.3ms)''。似乎有點長,對吧? –