官方文檔地址: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());