Laravel View Composer使用Ajax分页

时间:2018-09-10 16:26:12

标签: php ajax laravel pagination laravel-5.6

我设法找到一些资源来用ajax分页正常页面。很简单你可以简单地拥有这个:

if($request->ajax()) {
    return [
        'posts' => view('ajax.index')->with(compact('posts'))->render(),
        'next_page' => $posts->nextPageUrl()
    ];
}

但是对于Composer View,这是行不通的,因为我在View Composer中没有$request。谁能启发我。也许有某种方法可以在composer中获取变量,因为它的分页链接基本上是当前页面以及下一个contnet的扩展。

2 个答案:

答案 0 :(得分:1)

可以!只需提示Request类,服务容器就会在运行时注入它。然后,您可以访问请求对象的所有属性

private String name;
private String nickname;
// Rest of the fields with default (null) values
public Person(String name, String nickname) {
 this.name = name;
 this.nickname = nickname;
}
private Person(){}
// Getters, but no setters

更新: 如果您没有将其从控制器传递到视图,但是$ category对象仍在作曲家中使用,则会出现错误。 为避免这种情况,您可以删除use Illuminate\Http\Request; class MyComposer { public function __construct(Request $request) { $this->request= $request; } function compose($view) { if($this->request->ajax()) { return [ 'posts' => view('ajax.index')->with(compact('posts'))->render(), 'next_page' => $posts->nextPageUrl() ]; } } } 并显式传递使用类别的视图的视图名称,并创建另一个声明传递不使用这些视图的名称,因此您将需要两个视图编写器

*

或者您可以仅检查if语句中是否设置了$ category变量

答案 1 :(得分:0)

因此,这是此问题的答案。如果是View Composer分页。您不能在作曲家中进行分页,从技术上讲您具有做到这一点的能力,但是即使您通过了向提供者提出请求的请求(这显然是个坏主意),分页仍然无法很好地工作。

您将立即面临的基本问题之一是将页面分页到posts/postslug之类的其他页面中,这将很容易引发错误。因此,您应该做的是在控制器中创建一个非常基本的功能,并对该页面进行请求。

这里是一个例子。 可以说您使用以下查询为数据提供了

$posts = Post::orderBy('created_at', 'desc')
->paginate(15, ["*"], 'sidebar')->withPath('postPaginator');

要对此进行分页的功能必须是这样的:

public function postPaginator(){
$posts = Post::orderBy('created_at', 'desc')->paginate(15 , ["*"], 'sidebar');  
}

如果您希望此pagiantor对ajax请求和基本get请求都具有灵活性,那么可以返回如下结果:

if($this->request->ajax()) {
      return [
          'posts' => view('ajax.sidebarindex', ['posts' => $posts])->render(),
          'next_page' => $posts->nextPageUrl(),
      ];
}

$posts->nextPageUrl()可以提供下一页链接,因此您可以将其分配给下一个分页的按钮。