将以一个人员信息录入的功能进行快速上手后台二次开发,如果你对以下操作存在疑问,可能你需要先学习一下Laravel的开发文档。
建议直接使用下一章节的快速CURD功能:https://www.mycms.net.cn/dev/dev-fast-curd.html
一、创建人员信息表
php artisan make:migration CreateMyStaffTable
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMyStaffTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('my_staff', function (Blueprint $table) {
$table->id();
$table->string('name')->default('')->comment('姓名');
$table->tinyInteger('age')->default('1')->comment('年龄');
$table->tinyInteger('height', false, true)->default('0')->comment('身高');
$table->tinyInteger('weight')->default('0')->comment('体重');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('my_staff');
}
}
执行数据迁移
php artisan migrate
二、建立模型
模型存放位置自定(一般在Models目录下),我们为了方便演示在 System 模块下建立模型
<?php
namespace Modules\System\Models;
use App\Models\MyModel;
class StaffModel extends MyModel
{
protected $table = 'my_staff';
}
三、建立请求类
验证规则处(rules方法)有点需要注意,需要将所有入库的字段都写进去,如果字段不需要验证,直接赋值空数组,如下代码中的 weight .
<?php
namespace Modules\System\Http\Requests;
use App\Http\Requests\MyRequest;
class StaffRequest extends MyRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'name' => ['required'],
'age' => ['required'],
'height' => ['required'],
'weight' => [],
];
}
public function messages(): array
{
return [
'name.required' => '姓名不能为空',
'age.required' => '年龄不能为空',
'height.required' => '身高不能为空',
];
}
}
四、建立视图
基础操作需要三个视图文件,示例文件目录在 Modules\System\Resources\views\admin\staff
index.blade.php
@include("system::admin.layouts._header")
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<table id="currentTable" class="layui-table layui-hide" lay-filter="currentTable">
</table>
</div>
</div>
</body>
</html>
create.blade.php
@include("system::admin.layouts._header")
<body>
<div class="layuimini-container">
<form id="app-form" class="layui-form layuimini-form" method="post">
<div class="layui-form-item">
<label class="layui-form-label required">姓名</label>
<div class="layui-input-block">
<input type="text" name="name" class="layui-input" lay-reqtext="请输入姓名" placeholder="请输入姓名" value="">
<tip>填写姓名。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">年龄</label>
<div class="layui-input-block">
<input type="text" name="age" class="layui-input" lay-reqtext="请输入年龄" placeholder="请输入年龄" value="">
<tip>填写年龄。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">身高</label>
<div class="layui-input-block">
<input type="text" name="height" class="layui-input" lay-reqtext="请输入身高" placeholder="请输入身高" value="">
<tip>填写身高。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">体重</label>
<div class="layui-input-block">
<input type="text" name="weight" class="layui-input" lay-reqtext="请输入体重" placeholder="请输入体重" value="">
<tip>填写体重。</tip>
</div>
</div>
<div class="hr-line"></div>
<div class="layui-form-item text-center">
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit>确认</button>
<button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">重置</button>
</div>
</form>
</div>
</body>
</html>
edit.blade.php
@include("system::admin.layouts._header")
<body>
<div class="layuimini-container">
<form id="app-form" class="layui-form layuimini-form" method="post">
<div class="layui-form-item">
<label class="layui-form-label required">姓名</label>
<div class="layui-input-block">
<input type="text" name="name" class="layui-input" lay-reqtext="请输入姓名" placeholder="请输入姓名" value="{{$data->name}}">
<tip>填写姓名。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">年龄</label>
<div class="layui-input-block">
<input type="text" name="age" class="layui-input" lay-reqtext="请输入年龄" placeholder="请输入年龄" value="{{$data->age}}">
<tip>填写年龄。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">身高</label>
<div class="layui-input-block">
<input type="text" name="height" class="layui-input" lay-reqtext="请输入身高" placeholder="请输入身高" value="{{$data->height}}">
<tip>填写身高。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">体重</label>
<div class="layui-input-block">
<input type="text" name="weight" class="layui-input" lay-reqtext="请输入体重" placeholder="请输入体重" value="{{$data->weight}}">
<tip>填写体重。</tip>
</div>
</div>
<div class="hr-line"></div>
<div class="layui-form-item text-center">
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit>确认</button>
<button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">重置</button>
</div>
</form>
</div>
</body>
</html>
五、新建路由/JS渲染文件
路由
Route::get('/staff', 'StaffController@index')->name('system.staff');
Route::get('/staff/create', 'StaffController@create')->name('system.staff.create');
Route::post('/staff/create', 'StaffController@store');
Route::get('/staff/edit', 'StaffController@edit')->name('system.staff.edit');
Route::post('/staff/edit', 'StaffController@update');
Route::post('/staff/destroy', 'StaffController@destroy');
Js文件
注意,Js 的文件名是根据路由的name进行自动匹配的,比如上面的路由 system.staff 就会匹配 public\mycms\admin\js\system.staff.js 中的 index 方法。
init 变量中的地址对应路由地址,index_url 对应首页地址,其他也是相通的。
cols 为列表显示的字段,自行添加修改
define(["jquery", "easy-admin"], function ($, ea) {
var init = {
table_elem: '#currentTable',
table_render_id: 'currentTableRenderId',
index_url: '/system/staff',
add_url: '/system/staff/create',
edit_url: '/system/staff/edit',
delete_url: '/system/staff/destroy',
};
return {
index: function () {
ea.table.render({
init: init,
cols: [[
{type: "checkbox"},
{field: 'id', width: 80, title: 'ID'},
{field: 'name', minWidth: 80, title: '姓名'},
{field: 'age', minWidth: 80, title: '年龄'},
{field: 'height', minWidth: 80, title: '身高'},
{field: 'weight', minWidth: 80, title: '体重'},
{field: 'created_at', minWidth: 120, title: '创建时间'},
{field: 'updated_at', minWidth: 120, title: '更新时间'},
{
width: 250,
title: '操作',
templet: ea.table.tool,
operat: [
'edit',
'delete'
]
}
]],
});
ea.listen();
},
create: function () {
ea.listen();
},
edit: function () {
ea.listen();
}
};
});
六、添加权限节点说明
在 config/role.php 中添加以下代码,顺便提一下,系统根据读取路由地址来进行权限控制,无需添加进数据库,这一步的操作只是方便权限管理
'system.staff' => '人员管理',
'system/staff' => '人员列表',
'system/staff/create' => '新增人员',
'system/staff/edit' => '人员修改',
'system/staff/destroy' => '删除人员',
角色授权
七、最后一步,创建控制器
<?php
namespace Modules\System\Http\Controllers\Admin;
use App\Http\Controllers\MyAdminController;
class StaffController extends MyAdminController
{
public $view = 'admin.staff.';
public $model = 'Modules\System\Models\StaffModel';
public $request = 'Modules\System\Http\Requests\StaffRequest';
}
截止目前为止,人员信息管理功能已经完成,现在只需把改功能地址添加进菜单里即可