laravel 8 修改默认的paginate分页模板

最近建了个新项目,想着既然本地及线上环境php版本都升级到了7.3,于是就决定采用laravel 8框架来开发。
对照文档粗略的看了下与之前版本的区别,发现自带的分页ui由bootstrap UI改为tailwind css了。
一路查看源码,首先找到 Illuminate\Pagination\AbstractPaginator 115和122行:

   /**
    * The default pagination view.
    *
    * @var string
    */
    public static $defaultView = 'pagination::tailwind';

    /**
     * The default "simple" pagination view.
     *
     * @var string
     */
    public static $defaultSimpleView = 'pagination::simple-tailwind';

以及下方552行之后

    /**
     * Set the default pagination view.
     *
     * @param  string  $view
     * @return void
     */
    public static function defaultView($view)
    {
        static::$defaultView = $view;
    }

   /**
    * Set the default "simple" pagination view.
    *
    * @param  string  $view
    * @return void
    */
    public static function defaultSimpleView($view)
    {
        static::$defaultSimpleView = $view;
    }

我们的分页方法是 $list->links(); 肯定与links这个方法有关,找到,vendor/laravel/framework/src/Illuminate/Pagination/Paginator.php
这个是分页组件的入口文件(可以这么理解了),找一下links()方法, 94行,

    /**
     * Render the paginator using the given view.
     *
     * @param  string|null  $view
     * @param  array  $data
     * @return string
     */
     public function links($view = null, $data = [])
     {
         return $this->render($view, $data);
     }

    /**
     * Render the paginator using the given view.
     *
     * @param  string|null  $view
     * @param  array  $data
     * @return \Illuminate\Contracts\Support\Htmlable
     */
     public function render($view = null, $data = [])
     {
         return static::viewFactory()->make($view ?: static::$defaultSimpleView, array_merge($data, [
            'paginator' => $this,
         ]));
     }

可以看到参数$view指的就是对应的是模板名:

pagination::simple-default  // 默认,tailwind样式
pagination::simple-bootstrap-4  // bootstrap UI

所以我们在渲染分页时只需传参:

$data -> links('pagination::bootstrap-4')

就可以修改分页模板ui为bootstrap UI了。
是不是很简单优雅!

— end —

修改时间:2021-03-02 09:20
上述是通过改变渲染方法对应的参数而实现,而评论区大佬提供了一个更好的方法:

 \App\Providers\AppServiceProvider

在该’服务容器提供商’ boot()方法中加入一行代码即可:

    use Illuminate\Pagination\Paginator;

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Paginator::useBootstrap();
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

文章写了很多,但其实最后那一句就够了。只是为了说明下自己查看源码的过程而已,不喜轻喷。

1个月前 评论
use Illuminate\Pagination\Paginator;

public function boot()
{
    Paginator::useBootstrap();
}
1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!