laravel admin使用總結1--列表頁、導出、按鈕禁止

官方文檔地址:https://laravel-admin.org/docs/zh/

安裝和配置可查看官方文檔,不再贅述,這裏只介紹幾個自己使用時的可能會有的問題。

注:1.4和1.5以上是兩個大版本,不管從文件路徑還是數據庫字段都有改動,所以不建議直接從1.4升級到1.5以上,如果非要升級的話,建議可以先把之前的代碼複製出來一份,然後將項目中1.4版本laravel-admin卸載,重新安裝1.5以上。截止編寫本文時間,最新版本是1.7.7(即本列所用版本)。

1,基本使用:數據模型表格

protected function grid()
    {
        return Admin::grid(Articles::class, function (Grid $grid) {

            //對文章進行過濾
            $grid->model()->whereNotIn('id', [1,2,3]);
            //字段展示方式
            $grid->id('ID')->sortable(); //直接以字段名爲方法,並將id列置爲可排序
            $grid->column('title','標題')->setAttributes(['style' => 'color:red;']);  //由於title字段名和Grid對象的title衝突,所以使用column()方法代替,使用setAttributes給列添加樣式
            $grid->desc('描述')->style('font-size:20px'); //也可以使用style()方法添加樣式
            $grid->authors()->name('作者'); //取關聯表中的字段,這裏取的是文章的作者名
            $grid->is_published('發佈狀態')->display(function ($value) {
                return $value == 1 : '已發佈' : '未發佈';  //將字段格式化輸出
            });
            $grid->created_at()->hide(); //對於不想進入列表頁就展示的字段可以先隱藏,之後再通過列選擇按鈕將其顯示出來

           //設置搜索框
            $grid->filter(function ($filter) {
                // 去掉默認的id過濾器
                $filter->disableIdFilter();
                // 在這裏添加字段過濾器
                $filter->where(function ($query) {
                    $query->where('title', 'like', "%{$this->input}%")
                        ->orWhere('desc', 'like', "%{$this->input}%")
                }, '檢索詞')->placeholder('文章標題/描述'); //以輸入的字段進行搜索
                $filter->between('created_at', '創建時間')->datetime(); //設置一個以開始時間和結束時間的區間的時間搜索框
                $filter->equal('is_published','狀態')->select([0=>'未發佈',1=>'已發佈']); //以選擇框的形式進行過濾
            });
            //數據導出,方便對需要導出額數據字段進行限制和格式化,也可以不寫,不寫默認導出所有字段
            $grid->exporter(new ArticleExport()); //數據導出
            $grid->disableActions();  //禁止行級右側的所有操作按鈕
            $grid->disableCreateButton(); //禁止新建按鈕
            $grid->disableRowSelector();  //進行行選擇按鈕
        });
    }

(1)這裏給出了幾種取數據,格式化數據和給列加樣式的方式,基本可以滿足日常需求。

(2)可以通過$grid->model()->where()對列表頁數據添加限制條件,這裏使用whereNotIn('id',[1,2,3])來限制列表頁顯示id不等於1,2,3的所有數據

(3)可以通過$grid->xxx()->hide()來設置某個字段默認隱藏,像上面代碼裏$grid->created_at()->hide(),所以創建時間默認是未勾選的,即不展示,但可以通過勾選進行顯示

(4)檢索也給說了幾種檢索方式,注意一點,這裏給出的equal()方法對應的是1.4版本的is()方法,更多可參考:https://laravel-admin.org/docs/zh/model-grid-filters

(5)代碼最後給出了幾種按鈕的禁止方式,當然也可以設置全局禁止的方式,就不用每個grid裏都寫了。全局禁止寫在app/Admin/bootstrap.php

use Encore\Admin\Grid;

Grid::init(function (Grid $grid) {

    $grid->disableActions();  //禁止行級路由

    $grid->disablePagination(); //禁止分頁

    $grid->disableCreateButton(); //禁止新增

    $grid->disableFilter();  //禁止過濾

    $grid->disableRowSelector(); //禁止列選擇

    $grid->disableColumnSelector(); //禁止行選擇

    $grid->disableTools();  //禁止工具欄

    $grid->disableExport(); //禁止導出

    $grid->actions(function (Grid\Displayers\Actions $actions) {
        $actions->disableView(); //禁止行級查看路由
        $actions->disableEdit(); //禁止行級編輯路由
        $actions->disableDelete(); //禁止行級刪除路由
    });
});

2,數據導出:

class ArticleExport extends ExcelExporter implements WithMapping
{
    protected $fileName;

    public function __construct(Grid $grid = null)
    {
        parent::__construct($grid);
        $this->fileName = '文章列表_' . date('Ymd') . '.xlsx'; //重新命名文件名
    }

    protected $columns = [
        'id' => 'ID',
        'title' => '標題',
        'desc' => '描述',
        'author_id' => '作者',
        'is_published' => '發佈狀態',
        'created_at' => '創建時間',
    ];

    public function map($row): array
    {
        return [
            $row->id,
            $row->title,
            $row->desc,
            data_get($row, 'authors.name'), //關聯表數據用data_get獲取
            $row->is_published == 1:'已發佈':'未發佈',
            $row->created_at,
        ];
    }

}

(1)我們可以在構造器裏對文件名進行重命名,

(2)在$colums數組裏設置需要導出的字段,在map()方法裏對數據進行格式化輸出

(3)對於關聯表中的字段使用data_get()方法獲取

(4)在grid()方法裏進行調用,如最上面代碼中展示的 :$grid->exporter(new ArticleExport());

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章