目录

laravel-admin 记录


整合流程 (Laravel 5.5 + Ubuntu16.04 和Laravel 7 + Ubuntu18.04)

  1. 开个laravel新项目, 注意 key:generate, 配置好.env和数据库
  2. composer require 引入laravel-admin . composer require encore/laravel-admin
  3. publish 服务提供者 php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider", 这里为artisan增加 admin命令组
  4. php artisan admin:install, 此时会初始化数据库, 生成一系列控制器文件等等
  5. 用 hostname/login 打开后台,
    • 如果404, 说明需要启用URL重写模块
    • 如果500, 大概率是storage/framework 没有写入权限
  6. 管理后台登录页打开后, 用户名admin, 密码admin登录

基础开发流程(以新增一个客户管理界面为例子)

  1. php artisan make:model -a ClientModel 自动生成Client相关脚手架, (使用-a 参数会生成资源控制器,模型, 数据种子)
    1. 好习惯: 新建 /app/Models目录用于集中存放模型, 把刚刚生成的ClientModel 移动到App/Models
    2. 修改ClientModel 顶部的namespace, 改成 namespace App\Models;
    3. 好习惯: 给模型指定数据库名称
      • ClientModel 增加一条属性 protected $table = 'client'; (跟下面SQL新建的数据库表名称一致)
  2. 去数据库, 执行下面的SQL:
  • 好习惯: 这个SQL应该写在migration里面, 方便用代码管理数据库结构
CREATE TABLE `client` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`name` varchar(30) DEFAULT NULL,
`address` varchar(200) DEFAULT NULL,
`tel` varchar(20) DEFAULT NULL,
`account` varchar(30) NOT NULL COMMENT '客户账号',
`nick` varchar(50) DEFAULT NULL COMMENT '昵称',
`ref` varchar(10) NOT NULL COMMENT '客户编码,字母+数字',
`password` varchar(50) NOT NULL COMMENT '加盐哈希的密码',
`salt` varchar(10) NOT NULL COMMENT '密码用盐',
`activate` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启用',
`description` varchar(200) DEFAULT NULL COMMENT '客户描述',
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `ref_UNIQUE` (`ref`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
  1. 开网址 http://localhost:8090/admin/auth/menu, 新增入口菜单项,
    1. 注意: 路径要填/admin后面的相对路径, 这里写 /clients
  2. 创建admin下属的Client 路由和控制器, 用于管理Client.
    1. 新建控制器: php artisan admin:make ClientController --model=App\\Models\\ClientModel
    2. 新建资源路由: $router->resource('clients', ClientController::class); 到 app/Admin/routes.php
      • 上一步执行成功会提示这条要加的路由
      • 注意这个路由的baseurl 要跟菜单里面添加的 相对路径一致 "clients"
    3. 注意:
      • 可以用 php artisan admin:generate-menu 在管理后台自动生成菜单项(自动添加路由, 后续只需要改图标和所在上级菜单位置就可以了)
      • 先建立模型(执行migrate使得数据库里面有表), 再执行 admin:make XXXController, laravel-admin会在后台控制器中自动添加 grid() detail()和form()代码, 从而为列表, 编辑和新增界面自动增加内容, 不需要自己写字段
  3. 此时点"客户管理"已经可以打开后台的客户管理界面了, 但是没有数据.
  4. 为管理后台->客户管理列表页新增字段(表头)
    1. app/Admin/Controllers/ClientController.php 的 grid()方法新增下面内容:
$grid = new Grid(new ClientModel());
$grid->column('id', "ID")->sortable();
$grid->column('updated_at', "修改时间")->display(function($updated_at){
return Carbon::parse($updated_at)->toDateTimeString();
});
$grid->column('account', "客户账号");
$grid->column('nick', "昵称");
$grid->column('ref', "客户编码");
$grid->column('activate', "是否启用")->display(function($activate){
return $activate? '是':'否';
});
$grid->column('description', "客户描述");
  1. 填充一点测试用的假数据:
    1. 去 database/seeds/DatabaseSeeder.php 的 run()方法内添加一行 $this->call(ClientSeeder::class); (让它调用Client假数据种子)
    2. 去 database/seeds/ClientModelSeeder.php 的run()方法内添加:
      1. 注意, 顶上还要添加声明 use Faker\Factory as Faker; 和
      2. 执行命令 php artisan db:seed 测试数据就填进去了
    $faker = Faker::create();
    DB::table('client')->truncate();             // 模板修改2.  这里要替换表名
    for($i=0;$i<20;$i++){   \App\Models\ClientModel::create([     // 模板修改3.  这里要替换对象名
    'created_at'    => $faker->dateTimeThisMonth->format('Y-m-d H:i:s'),
    'updated_at'    => $faker->dateTimeThisMonth->format('Y-m-d H:i:s'),
    'account'       => $faker->lastName ,
    'nick'          => $faker->colorName ,
    'ref'           => strtoupper(substr($faker->word,0, 2)).$faker->numberBetween($min = 100000, $max = 999999),
    'password'      => $faker->uuid ,
    'address'       => $faker->address ,
    'tel'           => $faker->e164PhoneNumber      ,
    'salt'          => substr($faker->word, 0, 10), ,
    'activate'      => 1 ,
    'memo'   => $faker->text(100)
    ]);     usleep( intval($faker->randomDigit) * 13);  }
  1. 刷一下管理后台 -> 客户管理, 可以看到列表页的客户列表假数据

最佳实践

  1. 安装和完成laravel-admin以后, 开始业务代码开发之前(特别是migrate 和seed之前), 要做点处理
    1. 动作: 2016_01_04_173148_create_admin_tables.php 里面的 up()和 down()方法 第一行加一个return;
    2. 目的: 开发业务代码设计数据库框架的时候有可能需要多次执行数据库重建(migrate:refresh)和测试数据播种(db:seeder)动作, 执行 migrate:refresh的时候会执行所有migrate类中的down()方法和up()方法, 会删掉laravel-admin建立的一堆数据表, 导致丢失: 管理员账号密码, 自定义的菜单配置, 角色, 权限等等
      1. 做了以上动作以后, refresh只会删除和重建和laravel-admin不相关的是业务层面数据库内容, 减少重建管理员信息(角色,权限等等在UI操作编辑的数据)麻烦.
  2. 如何最小化手动写代码:
    1. 用laravel自带工具 php artisan make:model XxxModel 来新建数据模型
    2. 先执行migrate 在数据库中添加数据库结构( php artisan migrate, php artisan db:seed)填充基础数据
    3. 用laravel-admin 工具 php artisan admin:make XxxController --model=App\\nanespacePath\\XxxModel, 并且把执行成功提示的一行路由声明填入 app/Admin/routes.php
      • 这样的操作流程会生成管理后台中的三个UI:这个模型的列表、新增和编辑界面.
        • 不需要手动为管理后台的三个界面添加字段, 只需要去改字段名和对应修改就好了
    4. 再执行 php artisan admin:generate-menu 在管理后台自动生成菜单项 (自动添加路由, 后续只需要改图标和所在上级菜单位置就可以了)

注意事项

  1. laravel-admin的官网文档没有提及laravel基础, 需要先搞清楚laravel本身的机制(不懂laravel的需要学会了再来)

常见问题

  1. 管理后台获取当前管理员身份:(记录操作日志的时候)
    1. use Encore\Admin\Facades\Admin; (文档里面没写)
    2. Admin::user(); 文档
  2. x

常见错误

  1. Disk [admin] not configured, please add a disk config in config/filesystems.php.
    1. 解决方案
    2. Github issue
      -. php artisan storage:link (亲测不好用)
config/filesystems.php,  disks [] 里面新增
'admin' =>  [
                'driver'     => 'local',
                'root'       => public_path('upload'),
                'visibility' => 'public',
                'url' => env('APP_URL').'/public/upload/',
            ]
666    ·   1

(点赞功能开发中)

评论列表
{{item.userName}}
{{item.lastUpdate}}
{{item.content}}
{{item.like}}    |   {{item.unlike}}
{{ sItem.userName }}
{{ sItem.lastUpdate }}
{{ sItem.content }}
{{ sItem.like }}    |   {{ sItem.unlike }}