将以一个人员信息录入的功能进行快速上手后台二次开发,如果你对以下操作存在疑问,可能你需要先学习一下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';
}

截止目前为止,人员信息管理功能已经完成,现在只需把改功能地址添加进菜单里即可