Pjax and Laravel routes


Pjax and Laravel routes

目前集成jquery的pjax,将尽我所能解释。我有它在第一个视图内工作,但是当从地址栏直接访问URL地址时,我得到了没有@extends('layout.main')的视图。

下面是我的设置:

路由,一条路由用于retailers.index视图,另一条路由用于我的GET参数和retailers.stores视图。

Route::get('retailers', array(
    'as' => 'retailers', 
    'uses' => 'SiteController@retailers'));
Route::get('retailers/{city}', array(
    'as' => 'find-retailers',
    'uses' => 'SiteController@getRetailers'));

控制器:

public function retailers() {
$listings = DB::table('retailers_listings')
->orderBy('counter', 'desc')
->groupBy('country')
->get();
return View::make('retailers.index')
->with('retailers_listings', $listings)
}
public function getRetailers($city) {    
$locations = DB::table('retailers_listings')
->orderBy('country', 'asc')
->Where('city', $city)
->get();
return View::make('retailers.stores')
->with('retailers_listings', $locations);
}

href with pjax and URL route to retailers.stores view - using find-retailers

<a data-pjax href="{{ URL::route('find-retailers', array('city' => $string)) }}">
{{ $string }}
</a>
内联JS

$(document).pjax('[data-pjax] a, a[data-pjax]', '#pjax-container')

如果我加载/零售商(索引)一切工作,如果我按下链接,它将加载store.retailers视图内的<div id="pjax-container"></div>和URL将更改为零售商/{国家}。如果我直接从URL地址栏加载,它只会加载没有@extends('layout.main')的视图,因为我没有在retailers.stores视图中调用它,因为我加载了零售商。

基本上可以工作,但不直接加载地址栏

您不应该使用@if(!Request::ajax())来确定请求是否通过PJAX。

PJAX将提供特定的自定义标头(HTTP_X_PJAXHTTP_X_PJAX_CONTAINER),您应该使用它们来确定请求所请求的内容。

@if($request->server->get('HTTP_X_PJAX'))

为了更简单的解决方案…

您应该看看这个使用PJAX的laravel包:

https://github.com/simonstamm/laravel-pjax

它正确地使用了上面提到的头,甚至会自动为请求返回视图的适当部分。

Laravel不知道你在使用PJAX之类的东西。

你应该在每条路由中包含@extends('layout.main')。为了使用PJAX,您应该使layout.main只在Request::ajax()为false时吐出站点布局。