laravel_admin筆記

守候2009發表於2020-08-31

一。 將5.5以上的laravel框架方在編輯器

二。修改配置檔案正確連線資料庫

三。 cmd 命令進入框架

四。執行如下命令

五。 cmd執行

php artisan serve

六。 自己建立增刪改

1.建立資料表(在admin資料庫建立資料表如title)

2.建立模型層

php artisan make:model /Admin/Models/Title

在模型層繫結資料表

protected $table=’title’;

public $timestamps=false;

3. 建立控制器

php artisan admin:make TitleCotrollers –model=App\Admin\Models\Title

如下:

4.執行: php artisan serve

5.谷歌url訪問:

大功尚未告成:

同學繼續努力!

更新頭像命令:php artisan config:cache

頁面新增建立的表

控制器各方法的作用:

$title屬性用來設定這個CURD模組的標題,可以將它修改為任何其它的字串。

grid方法對應資料的列表頁,參考model-grid 文件來實現列表頁的相關功能邏輯。

detail方法對應資料的詳情頁,在列表頁操作列的詳情顯示按鈕點選進入,參考model-show 文件來實現詳情頁的相關功能邏輯。

form方法對應資料的建立和編輯頁,參考model-form 文件來實現資料建立和編輯頁的相關功能邏輯。

grid方法對應資料的列表頁,參考model-grid 文件來實現列表頁的相關功能邏輯。

示例:

// 第一列顯示id欄位,並將這一列設定為可排序列

$grid->column(‘id’, ‘ID’)->sortable();

1)->sortable()顯示排序

2)$grid->column(‘’,__’列顯示名’)->display(function() { return ‘定義方法查詢你需要的內容,顯示內容’; });

3) // 第六列顯示released欄位,通過display($callback)方法來格式化顯示輸出 $grid->column(‘released’, ‘上映’)->display(function ($released) { return $released ? ‘是’ : ‘否’; //三元運算判斷是否上映 });

4)->using([‘0’=>’不顯示’,’1’=>’展示’,’2’=>’到時顯示’])

5)開關按鈕展示

// $states = [

// ‘on’ => [‘value’ => 1, ‘text’ => ‘開啟’, ‘color’ => ‘primary’],

// ‘off’ => [‘value’ => 2, ‘text’ => ‘關閉’, ‘color’ => ‘default’],

// ];

// $grid->column(‘hh’)->switch($states);

改格式 擷取30位 超出用。。。顯示

列物件的setAttributes()方法用來給當前這一列的每一行新增HTML屬性, 比較有用的一個場景是給當前列增加樣式

$grid->column(‘title’)->setAttributes([‘style’ => ‘color:red;’]);

基於setAttributes()方法封裝了style()方法,直接新增樣式,比如限制列的寬度:

$grid->column(‘desc’)->style(‘max-width:200px;word-break:break-all;’);

$grid->column(‘tags’)->pluck(‘name’);資料表若存的是json串的用->pluck(‘name’)可取其對應的值

自定義行&批量操作

php artisan admin:action Post\Replicate –grid-row –name=”複製”

Post對應控制器名建立的檔案 Replicate自己定義的名 name為行操作的名字

控制器寫

$grid->tools(function (Grid\Tools $tools) {

$tools->append(new Value());// Value為你建立的操作自己定義的名字

});

建立檔案寫:

class Value extends Action

{

protected $selector = ‘.value’;

//彈出框表單處理邏輯(入庫等)

public function handle(Request $request)

{

$goods = new IbrandGoods();

$a = $goods->goodsGetFrst($request->get(‘goods_no’));

$arr[“pic_url”] = $a[‘goods_img’];

$arr[“goods_name”] = $a[‘goods_name’];

$arr[“good_info”] = $a;

$arr[“type”] = $request[‘type’];

$arr[“goods_no”] = $request[‘goods_no’];

$arr[“page_url”] = $request[‘page_url’];

$arr[“status”] = $request[‘status’];

$arr[“publish_time”] = $request[‘publish_time’];

if($request[‘type’]==1&&$request[‘page_url’]==null){

return $this->response()->success(‘您選擇了輪播圖廣告,所以廣告連結地址必需填寫’)->refresh();

}

if($request[“status”]==2&&$request[“publish_time”]==null ){

return $this->response()->success(‘您選擇了到時顯示,所以必需填寫推送時間’)->refresh();

}

$recommend = new Recommend();

/* $recommend->good_info=$arr[‘good_info ‘];

$recommend->pic_url=$arr[‘goods_img ‘];

$recommend->type=$arr[‘type ‘];

$recommend->status=$arr[‘status ‘];

$recommend->good_no=$arr[‘good_no ‘];

$recommend->page_url=$arr[‘page_url ‘];

$recommend->publish_time=$arr[‘publish_time ‘];

$recommend->save();*/

$aaa = $recommend->add($arr);

return $this->response()->success($aaa)->refresh();

}

//彈出表單頁面

public function form()

{

//$this->image(‘pic_url’, ‘Placeholder…’);

$directors = [

‘0’ => ‘輪播圖商品’,

‘1’ => ‘輪播圖廣告’,

‘2’ => ‘左邊欄商品’,

‘3’ => ‘右邊欄商品’,

‘4’ => ‘熱賣商品’

];

$this->select(‘type’, ‘展示地方’)->options($directors);

$dir = [

‘0’ => ‘不顯示’,

‘1’ => ‘展示’,

‘2’ => ‘到時顯示’

];

$this->select(‘status’, __(‘是否展示’))->default(‘0’)->options($dir);

$this->text(‘goods_no’, __(‘商品編碼’));

$this->text(‘page_url’, __(‘廣告連結地址’))->placeholder(‘如選擇輪播圖廣告請輸入廣告連結地址’);

$this->datetime(‘publish_time’, __(‘推送時間’));

}

public function html()

{

return <<<HTML

新增

HTML;

}

}

倒序關聯模型層 展示 修改 新增

//關聯模型層

public function newsuser()

{

return $this->belongsTo(NewsUser::class, ‘user_id’,’id’);

}

$grid->column(‘newsuser.uname’, __(‘User id’));

$form->select(‘user_id’)->options(NewsUser::all()->pluck(‘uname’, ‘id’));

正序模型關聯 一對一

//主模型層

public function useraddress()

{

return $this->hasOne(IbrandUserAddress::class,’user_id’,’id’);

}

$grid->column(‘useraddress.is_default’, __(‘狀態’));

//關聯方法名點要顯示的欄位名

如果表格的欄位比較多,擠壓了列的顯示,可以用過fixColumns方法來設定固定列 (有滑動條檢視其他列)

$grid->fixColumns(3, -2);

第一個參數列示固定從頭開始的前三列,第二個參數列示固定從後往前數的兩列,(第二個引數可不傳,預設為-1)

開關 註釋:要想修改關聯查詢顯示的資料,必需再修改頁面新增對應的form表單修改哪一行的資料

on和off對用開關的兩個值1和0:

修改頁

$states = [ ‘on’ => [‘value’ => 1, ‘text’ => ‘開啟’, ‘color’ => ‘success’], ‘off’ => [‘value’ => 0, ‘text’ => ‘關閉’, ‘color’ => ‘danger’], ]; $form->switch(欄位名)->states($states);//一般要用int型別

展示頁

// 設定text、color、和儲存值 $states = [ ‘on’ => [‘value’ => 1, ‘text’ => ‘開啟’, ‘color’ => ‘primary’], ‘off’ => [‘value’ => 2, ‘text’ => ‘關閉’, ‘color’ => ‘default’], ]; $grid->column(‘status’)->switch($states);

行內編輯器 ->editable();可以直接修改欄位資料

可以讓你在表格中點選資料,在彈出的對話方塊裡面編輯儲存資料,使用方法如下

$grid->column(‘title’)->editable(‘select’, [1 => ‘option1’, 2 => ‘option2’, 3 => ‘option3’]);

效果圖

列的展開(一般用於一對多表主表展示)

更牛操作網址部落格:擴充套件 Laravel-admin,實現一行程式碼展現內聯表格的功能,自動加頁碼,... 可以分頁

主表模型層

public function catrend()

{ //副表 副表欄位 主表欄位

return $this->hasMany(Recommend::class,’type’,’cate_id’);

}

主表控制器

$grid->column(‘cate_id’, __(‘推薦欄位id’))

->using([‘0’ => ‘輪播圖商品’, ‘1’ => ‘輪播圖廣告’, ‘2’ => ‘左邊欄商品’, ‘3’ => ‘右邊欄商品’, ‘4’ => ‘熱賣商品’])

->expand(function ($model) {

//關聯方法名 獲取全部

$comments = $model->catrend()->take(10)->get()->map(function ($comment) {

// return $comment->only([‘goods_name’, ‘goods_no’, ‘status’,’created_at’]);

//副表欄位名

$data= $comment->only([‘pic_url’,’goods_name’, ‘goods_no’, ‘status’,’created_at’]);

$sta= $data[‘status’]; //如果想展示你要的效果,把欄位值單提出來,重新新賦值處理你想要的效果

$imgurl=$data[‘pic_url’];

$img=”<img src=’www.humz.com/upload/$imgurl' style="max-width:100px;max-height:100px">”;

$data[‘pic_url’]=$img;

//[‘0’ => ‘不顯示’, ‘1’ => ‘展示’, ‘2’ => ‘到時顯示’]

if($sta==0){

$data[‘status’]=’不顯示’;

}elseif($sta==1){

$data[‘status’]=’顯示’;

}else{

$data[‘status’]=’到時顯示’;

}

return $data;

});

return new Table([‘商品圖片’,’商品名’, ‘商品編號’,’是否顯示 ‘,’釋出時間’], $comments->toArray());

});

效果圖

當一列的欄位太多時也可以用向列展開一樣的效果展示

$grid->column(‘goods_name’, ‘商品名稱’)->expand(function ($model) {

//獲取其他欄位

$comments[] = $model->only([‘market_price’,’sell_price’,’cost_price’,’goods_detail’,’created_at’,’updated_at’]);

return new Table([‘市場價’,’銷售價’,’成本價’,’商品詳情’,’釋出時間’,’修改時間’], $comments);

})->width(260);

效果圖

列的彈出框顯示

主表模型層

public function goods()

{

return $this->hasOne(IbrandGoods::class,’goods_no’,’goods_no’);

}

主表控制器

$grid->column(‘goods.goods_name’, ‘商品基本資訊’)->modal(‘最新評論’, function ($model) {

//主表模型層關聯表方法

$comments = $model->goods()->take(10)->get()->map(function ($comment) {

return $comment->only([‘goods_name’, ‘goods_no’, ‘sale_count’,’sell_price’,’googs_detail’]);

});

return new Table([‘商品名稱’, ‘商品編號’, ‘商品銷量’,’商品售價’,’商品描述’], $comments->toArray());

});

效果圖

圖片輪播(必需在模型層將圖片欄位轉成json存入資料庫)

protected $casts = [

‘good_pic’ => ‘json’,

];

如果欄位值為圖片陣列,可以用下面的呼叫顯示為圖片輪播元件

$grid->column(‘good_pic’, __(‘Good pic’))->carousel($width = 300, $height = 200);

表單控制器

$form->multipleImage(‘good_pic’, __(‘多圖上傳’))->removable()->sortable();

規格選擇器

$grid->selector(function (Grid\Tools\Selector $selector) {

$selector->select(‘欄位名’, ‘品牌’, [

1 => ‘華為’,

2 => ‘小米’,

3 => ‘OPPO’,

4 => ‘vivo’,

]);

});

效果圖

圖片放大效果安裝

命令列安裝擴充套件

composer require laravel-admin-ext/grid-lightbox

php artisan vendor:publish –tag=laravel-admin-grid-lightbox

配置

開啟config/admin.php,將屬於此擴充套件的配置新增到extensions部分。

‘extensions’ => [

‘grid-lightbox’ => [

// Set to false if you want to disable this extension

‘enable’ => true,

]

]

用法

$grid->pic(‘海報圖’)->lightbox([‘width’ => 50, ‘height’ => 50]);

admin後臺腳手架

參考部落格:部落格:Larave-admin 搭建管理後臺 - 腳手架工具

composer require laravel-admin-ext/helpers

php artisan admin:import helpers

模型樹操作 (用於手機分類)

參考部落格:部落格:Laravel-admin 搭建管理後臺 - 資料模型樹(1)

部落格:Laravel-admin 搭建管理後臺 - 資料模型樹(2)

效果圖

簡便操作

文件地址:laravel-admin.org/docs/zh/model-tr...

1.前提條件:表格結構裡面有三個必要的欄位parent_id (父級id)、order(排序)、title(名稱),其它欄位沒有要求。

2.正常建立模型層 控制器 路由的定義

3.模型層綁表 做欄位修改 引用 use ModelTree;

<?php

namespace App\Admin\Models;

use Encore\Admin\Traits\AdminBuilder;

use Encore\Admin\Traits\ModelTree;

use Illuminate\Database\Eloquent\Model;

class IbrandGoodsCategory extends Model

{

use ModelTree, AdminBuilder;

protected $table = ‘ibrand_goods_category’;

public function __construct(array $attributes = [])

{

parent::__construct($attributes);

//這裡根據自己的欄位修改

$this->setParentColumn(‘parent_id’);

$this->setTitleColumn(‘order’);

$this->setTitleColumn(‘category_name’);

}

}

4.控制器操作 請參照地址:www.erlo.vip/share/2/58762.html


use App\Admin\Models\IbrandGoodsCategory;

use Encore\Admin\Controllers\AdminController;

use Encore\Admin\Facades\Admin;

use Encore\Admin\Form;

use Encore\Admin\Grid;

use Encore\Admin\Layout\Column;

use Encore\Admin\Layout\Content;

use Encore\Admin\Layout\Row;

use Encore\Admin\Show;

use Encore\Admin\Widgets\Box;

public  function  index(Content $content)

{

  return Admin::content(function  ($content)  {

 $content->header('商品分類管理');

 $content->row(function  (Row $row)  {

 $row->column(6, $this->viewterr());

 $row->column(6,  function  (Column $column)  {

 $form =  new  \Encore\Admin\Widgets\Form();

 $form->action(admin_url('ibrand_goods_categories'));//設定表單提交地址

 $form->select('parent_id',  __('父級分類'))

  ->options(IbrandGoodsCategory::selectOptions(function  ($category)  {

  return $category->where('parent_id',  '0');

  }));

 $form->text('category_name',  __('分類名稱'));

  //小圖示入庫  icon

 $form->icon('category_icon',  __('分類圖示'));

  //設定獲取時間戳 字串擷取 留取排序的數字

 $form->number('order',  __('排序'))->default(substr(time(),  4));

 $form->hidden('_token')->default(csrf_token());  //post提交是設定安全提交

 $column->append(new  Box(__('規格管理'), $form));

  });

  });

  });

}

public  function  viewterr()

{  //     模型層

  return IbrandGoodsCategory::tree(function  ($tree)  {

 $tree->branch(function  ($branch)  {

  //小圖示顯示 

 $img="<i class='fa {$branch['category_icon']}'></i>";

  //前臺顯示的每行欄位

  return  "$img {$branch['id']} - {$branch['category_name']} ";

  });

  });

}

修改form

select中使用分類樹

$form->select(‘parent_id’, __(‘Parent id’))->options(Category::selectOptions())->default(1);

效果圖

富文字編輯 (採集頁面圖片上傳等更方便)

composer require jxlwqq/quill

php artisan vendor:publish –tag=laravel-admin-quill

2.配置config/admin.php

‘extensions’ => [

‘quill’ => [

// If the value is set to false, this extension will be disabled

‘enable’ => true,

‘config’ => [

‘modules’ => [

‘syntax’ => true,

‘toolbar’ =>

[

[‘size’ => []],

[‘header’ => []],

‘bold’,

‘italic’,

‘underline’,

‘strike’,

[‘script’ => ‘super’],

[‘script’ => ‘sub’],

[‘color’ => []],

[‘background’ => []],

‘blockquote’,

‘code-block’,

[‘list’ => ‘ordered’],

[‘list’ => ‘bullet’],

[‘indent’ => ‘-1’],

[‘indent’ => ‘+1’],

‘direction’,

[‘align’ => []],

‘link’,

‘image’,

‘video’,

‘formula’,

‘clean’

],

],

‘theme’ => ‘snow’,

‘height’ => ‘200px’,

]

]

]

3.重新整理框架

php artisan config:cache

4.對應的控制器新增修改

$form->quill(‘content’);

5.顯示用 ->view(‘渲染頁面’)

$grid->column(‘content’, __(‘Content’))->view(‘aaa’);

6. 渲染頁面 aaa.blade.php

{!! $value !!} 次方法可以將資料庫的html資料解析到頁面渲染

效果圖

後臺頁面佈局(一頁分塊展示)

public function index(Content $content)

{

// 選填

$content->header(‘填寫頁面頭標題’);

// 選填

$content->description(‘填寫頁面描述小標題’);

$content->row(function(Row $row) {

$row->column(6, $this->tree());//¥this-》tree()為顯示頁面的方法

$row->column(6, $this->form());

});

return $content;

}

$this->tree();樹狀結構顯示的方法;

protected function tree()

{

return Category::tree(function (Tree $tree) {

$tree->branch(function ($data) {

return “{$data[‘id’]} - {$data[‘title’]}”;

});

});

}

$this->form(); 新增表單顯示的方法;

protected function form()

{

$form = new Form(new Category);

$form->display(‘id’, ‘ID’);

$form->select(‘parent_id’, ‘所屬類別’)->options(Category::selectOptions());

$form->text(‘title’, ‘類別名稱’)->rules(‘required’);

$form->display(‘created_at’, ‘Created At’);

$form->display(‘updated_at’, ‘Updated At’);

return $form;

}

效果圖:

模型詳情 (後臺詳情頁展示多模型的資料頁)

效果圖:

sers表和上面的posts表為一對一關聯關係,通過posts.author_id欄位關聯,users表結構如下:

users id - integer name - string email - string posts id - integer author_id - integer content - text

模型定義為:

class User extends Model

{

}

class Post extends Model

{

public function author()

{

return $this->belongsTo(User::class, ‘author_id’);

}

}

那麼可以用下面的方式顯示post所屬的使用者的詳細:

$show->author(‘作者資訊’, function ($author) {

$author->setResource(‘/admin/users’);

$author->id();

$author->name();

$author->email();

});

其中$author物件也是Show例項,同樣可以使用上面的各種方法

注意:為了能夠正常使用這個皮膚右上角的工具,必須用setResource()方法設定使用者資源的url訪問路徑

一對多或多對多關係

一對多或多對多關係的關聯資料會以Model-grid的方式呈現,下面是簡單的例子

posts表和評論表comments為一對多關係(一條post有多條comments),通過comments.post_id欄位關聯

comments id - integer post_id - integer content - string

模型定義為:

class Post extends Model

{

public function comments()

{

return $this->hasMany(Comment::class);

}

}

class Comment extends Model

{

}

那麼評論的顯示通過下面的程式碼實現:

$show->關聯方法名(‘評論’, function ($comments) {

$comments->resource(‘/admin/comments’);

$comments->id();

$comments->content()->limit(10);

$comments->filter(function ($filter) {

$filter->like(‘content’);

});

});

$comments是一個Encore\Admin\Grid例項,詳細的使用方法可以參考model-grid

注意:為了能夠正常使用這個資料表格的功能,必須用resource()方法設定comments資源的url訪問路徑

皮膚工具設定

皮膚右上角預設有三個按鈕編輯、刪除、列表,可以分別用下面的方式關掉它們:

$show->panel()

->tools(function ($tools) {

$tools->disableEdit();

$tools->disableList();

$tools->disableDelete();

});

地址省市區入庫及顯示

在laravel_admin文件 擴充套件 找中國省市區級聯選擇

github.com/laravel-admin-extension...

composer require laravel-admin-ext/china-distpicker

php artisan vendor:publish –tag=laravel-admin-china-distpicker

配置檔案config

‘extensions’ => [

‘china-distpicker’ => [

// 如果要關掉這個擴充套件,設定為false

‘enable’ => true,

]

]

在資料庫匯入sql檔案 china_area.sql

檔案下載地址 部落格:中國城市區域資料下載

admin使用 blog.csdn.net/xiaxia_Lin/article/d...

引用 use Illuminate\Support\Facades\DB;

$form->distpicker([

‘province’ => ‘省’,

‘city’ => ‘市’,

‘district’ => ‘區’

]);

//省名

$grid->column(‘province’, __(‘Province’))

->display(function($code) {

$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);

return $name;

});

//市名

$grid->column(‘city’, __(‘City’))

->display(function($code) {

$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);

return $name;

});

//區名

$grid->column(‘district’, __(‘District’))

->display(function($code) {

$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);

return $name;

});

$show->field(‘province’, __(‘Province’))

->unescape()->as(function ($code) {

$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);

return $name;

});

$show->field(‘city’, __(‘City’))

->unescape()->as(function ($code) {

$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);

return $name;

});

$show->field(‘district’, __(‘District’))

->unescape()->as(function ($code) {

$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);

return $name;

});

下拉列展示

$data是返回的欄位值

$grid->column(‘’, __(‘地址’))->expand(function ($model) {

$comments = $model->useraddres()->take(10)->get()->map(function ($comment) {

$data=$comment->only([‘id’, ‘name’, ‘mobile’, ‘province’, ‘city’, ‘area’, ‘address’

]);

$name = DB::table(‘china_area’)->where(‘code’, $data[‘area’])->value(‘name’);

$data[‘area’]=$name;

return $data;

});

return new Table([‘ID’, ‘收件人’, ‘聯絡電話’, ‘省’, ‘市’, ‘區’, ‘詳細地址’], $comments->toArray());

});

有顏色的效果展示 效果圖

$grid->column(‘status’, __(‘是否展示’))->using([‘0’ => ‘不顯示’, ‘1’ => ‘展示’, ‘2’ => ‘到時展示’])->filter([

0 => ‘不顯示’,

1 => ‘展示’,

2 => ‘到時展示’,

])->label([

1 => ‘warning’,

2 => ‘default’,

3 => ‘success’,

4 => ‘info’,

]);

本作品採用《CC 協議》,轉載必須註明作者和本文連結