📜  带有获取参数的 laravel 分页 - PHP (1)

📅  最后修改于: 2023-12-03 15:39:26.948000             🧑  作者: Mango

带有获取参数的 Laravel 分页 - PHP

分页是 Web 应用程序中常见的功能,它允许我们将大量的数据分成多个页面来提高用户体验。Laravel 提供了非常方便的分页功能,但是默认情况下它并不支持获取查询参数,本文将介绍如何在 Laravel 分页中添加查询参数的方法。

1. 安装 Laravel

在开始使用 Laravel 分页功能之前,我们需要先安装好 Laravel。

使用 Composer 命令进行安装:

composer create-project --prefer-dist laravel/laravel <your-project-name>
2. 创建模型和数据表

我们需要创建一个模型和数据表来模拟分页数据。

创建模型:

php artisan make:model Post -m

Post 模型中添加 titlecontent 字段:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = ['title', 'content'];
}

创建数据表:

php artisan migrate
3. 添加一些数据

database/seeds/DatabaseSeeder.php 中添加以下代码:

<?php

use App\Post;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        factory(Post::class, 100)->create();
    }
}

在终端运行命令:

php artisan db:seed
4. 创建路由

routes/web.php 中添加以下代码:

Route::get('posts', 'PostController@index');
5. 创建控制器

在终端输入以下代码:

php artisan make:controller PostController

app/Http/Controllers/PostController.php 中添加以下代码:

<?php

namespace App\Http\Controllers;

use App\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    public function index(Request $request)
    {
        $posts = Post::paginate(10)
            ->appends(['sort' => $request->sort, 'order' => $request->order]);

        return view('posts.index', compact('posts'));
    }
}

我们在 paginate() 方法中传入了每页显示 10 条记录的参数,并使用 appends() 方法来将我们需要传递的参数添加到分页链接中。

6. 创建视图

resources/views/posts/index.blade.php 中添加以下代码:

<!DOCTYPE html>
<html>
<head>
    <title>Posts</title>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>
                    <a href="?sort=title&order={{ $posts->appends(request()->query())->links()->first()->url($posts->appends(request()->query())->links()->first()->getPageName(),  'asc') }}">Title</a>
                </th>
                <th>
                    <a href="?sort=created_at&order={{ $posts->appends(request()->query())->links()->first()->url($posts->appends(request()->query())->links()->first()->getPageName(), 'asc') }}">Created At</a>
                </th>
            </tr>
        </thead>
        <tbody>
            @foreach($posts as $post)
                <tr>
                    <td>{{ $post->title }}</td>
                    <td>{{ $post->created_at }}</td>
                </tr>
            @endforeach
        </tbody>
    </table>

    {{ $posts->appends(request()->query())->links() }}
</body>
</html>

在视图中,我们使用 appends() 方法传递了查询参数,并使用 getPageName() 方法获取当前页面名称。我们在表头中添加了链接,用于排序,并使用 url() 方法获取链接地址。

在视图中,我们使用了 appends() 方法将查询参数传递了过去,并使用 links() 方法来生成分页链接。

7. 测试分页

在浏览器中输入 http://localhost:8000/posts,即可查看分页效果。可以使用以下链接来测试分页:

  • http://localhost:8000/posts?sort=title&order=asc
  • http://localhost:8000/posts?sort=title&order=desc
  • http://localhost:8000/posts?sort=created_at&order=asc
  • http://localhost:8000/posts?sort=created_at&order=desc
总结

本文介绍了如何在 Laravel 分页中添加查询参数的方法。这样可以让我们编写出更加灵活、更加智能的分页功能,提升用户体验和系统性能。