laravel_admin笔记

一。 将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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

格式可以优化一下

4年前 评论

可以看一下 markdown 语法,标题自动加粗显示,按级排放还能形成目录;

把代码放在代码区域内,也比较美观易懂;

file

4年前 评论

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