laravel 8 修改預設的paginate分頁模板

CTdream發表於2021-03-01

最近建了個新專案,想著既然本地及線上環境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\Support\ServiceProvider;

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Paginator::useBootstrap();
    }
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章