【问题标题】:Pjax and Laravel routesPjax 和 Laravel 路由
【发布时间】:2014-04-13 00:54:21
【问题描述】:

目前正在集成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 与 pjax 和 URL 路由到 retailers.stores 视图 - 使用 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')

如果我正在加载 /retailers(索引),一切正常,如果我按下链接,它将在 &lt;div id="pjax-container"&gt;&lt;/div&gt; 中加载 store.retailers 视图,并且 URL 将更改为零售商/{country}。如果我直接从 URL 地址栏加载,它只会加载没有 @extends('layout.main') 的视图,因为我不会在我的 retailers.stores 视图中调用它,因为我在 pjax 中加载了 Retailers.stores。

基本上可以,但是直接加载地址栏时就不行了。

【问题讨论】:

    标签: php laravel pjax


    【解决方案1】:

    您不应使用@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

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

    【讨论】:

    • 这个包的问题是它会通过 dom 爬行来查找内容。有一个更好的方法 - 查看标头,如果它是 pjax 请求,请不要包含布局。您可以通过扩展 laravel 控制器并修改行为来做到这一点。 laravel 的两个 PJAX 实现都很糟糕。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢回复,能举个例子吗?
    • 只需将您不希望包含在 PJAX 调用中的所有布局位包装在 @if(!Request::ajax()) 块中。
    猜你喜欢
    • 2016-03-05
    • 2016-09-23
    • 2018-11-30
    • 2018-03-01
    • 2016-05-03
    • 2020-12-25
    • 2017-12-16
    • 1970-01-01
    • 2019-02-11
    相关资源
    最近更新 更多