Laravel 查看 Composer 分页 ajax

Laravel View Composer Paginating with ajax

我设法找到了一些资源来使用 ajax 对普通页面进行分页。这很容易。你可以简单地拥有这个:

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

但是对于 Composer View 这将不起作用,因为我无法在 View Composer 中使用 $request。任何人都可以启发我。也许有某种方法可以在 composer 中获取变量,因为它的分页 link 基本上是当前页面加上下一个 contnet 的扩展名。

可以!只需键入提示 Request class 服务容器就会将其注入 运行 time.Then 您可以访问请求对象的所有属性

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()
          ];
        }
    }

}

更新: 如果您不将它从控制器传递到您的视图,但 $category 对象仍在作曲家中使用,则会出现错误。 为避免这种情况,您可以删除 * 并显式传递视图名称那些使用类别的视图,并创建另一个声明传递那些不使用类别的视图的名称,因此您将需要两个视图作曲家

//these views use category
View::composer([ 'view1','view2'], 'App\Http\ViewComposers\MyComposerWithCategory' ); 


//these views don't
View::composer([ 'view3','view4'], 'App\Http\ViewComposers\MyComposerWithoutCategory' ); 

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

所以这里是这个问题的答案。在 View Composer 分页的情况下。你不能在 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 请求都灵活,那么您可以 return 结果如下:

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

$posts->nextPageUrl() 是否提供下一页 link 以便您可以将其分配给下一个分页的按钮。