1. Fidis OpenFrame 开发规范文档

1.1. 概述

1.1.1. 文档说明

该文档确定Fidis系统中OpenFrame模块的开发规范,用于指导内部、外部开发人员基于Fidis系统进行OpenFrame功能模块的开发,并对开发人员编码进行规范

1.1.2. 适用对象

本文档的目的读者是智物联物联网体系下所有开发人员。

1.1.3. 修订记录

日期 版本 说明 编写
2019-05-24 V1.0.0 (R1) 初始化 qinguoqing

1.1.4. 术语和缩略词

序号 术语名称 英文名称 术语说明
1 FIDIS Flexible information data integrate system 柔性信息与数据集成系统

1.2. 入门基础

1.2.1. 开发环境

  • PHP >= 7.1.3
  • laravel/framework >= 5.7.0
  • nwidart/laravel-modules >= 4.0
  • mysql >= 5.7.21
  • PHP OpenSSL 扩展
  • PHP PDO 扩展
  • PHP Mbstring 扩展
  • PHP Tokenizer 扩展
  • PHP XML 扩展
  • PHP Ctype 扩展
  • PHP JSON 扩展

1.2.2. Fidis 系统安装

1.3. 结构设计

1.3.1. 系统目录结构

Fidis/
├─ app/
│   ├─ Console/
│   ├─ Exceptions/
│   ├─ Helper/
│   ├─ Http/
│   ├─ Providers/
│   └─ user.php
├─ bootstrap/
│   ├─ cache/
│   └─ app.php
├─ config/
├─ database/
│   ├─ factories/
│   ├─ migrations/
│   └─ seeds/
│        └─ DatabaseSeeder.php
├─ Modules/
│   ├─ Controllers/
│   │   └─ TestController.php
│   ├─ Middleware/
│   └─ Requests/
├─ public/
│   ├─ RouteServiceProvider.php
│   └─ TestServiceProvider.php
├─ resources/
│   ├─ js/
│   ├─ lang/
│   ├─ sass/
│   └─ views/
│        ├─ layouts
│        │   └─ master.blade.php
│        └─ index.blade.php
├─ routes/
│   ├─ api.php
│   ├─ channels.php
│   ├─ console.php
│   └─ web.php
├─ storage/
│   ├─ app/
│   ├─ framework/
│   └─ logs/
├─ tests/
├─ vandor/
├─ .env
├─ artisan
├─ CHANGELOG.md
├─ composer.json
├─ composer.lock
├─ package-lock.json
├─ package.json
├─ phpunit.xml
├─ readme.md
├─ server.php
├─ Version.json
└─ webpack.mix.js

1.3.2. 路由设置

Fidis系统采用模块化开发思路,各功能界面均以标准化模块的形式进行配置开发,并通过单一入口模式进行访问,访问方式格式如下:

http://yourdomain.com/[module]/[controller]/[action]?[param1]=xx&[param2]=xx

其中:

  • module:模块名称
  • controller:控制器名称
  • action:方法名称
  • param:参数名称

示例如下:

http://yourdomain.com/openframe/project/detail?project_id=1

1.3.3. 入口程序

系统入口程序为fidis/public/index.php文件,根据设置的路由跳转到对应模块中,再根据路由的控制器、方法以及模块中的路由设置,加载相应的界面或调用相应的接口。

1.3.4. 扩展模块

Fidis系统中的模块均位于fidis/Modules目录下,每一个目录即为一个模块,模块名称在系统中全局唯一,并与路由中的module字段对应。

1.3.5. 命名规范

1.4. 系统配置

1.4.1. 模块配置

模块配置文件位于每个模块下的Config/config.php文件中,配置信息为数组格式,可直接在模块中进行调用配置信息。

配置文件格式如下:

<?php
return [
    'name' => 'Openframe',//模块名称
    'is_system'=>0,//模块是否系统模块
    'status'=>1,//模块状态,0:未安装,1:已安装
    'version'=>'V1.0.0',//版本号
    'upgrade_time'=>'2019-05-24 00:00:00',//安装/升级时间
    'description'=>'OpenFrame基础模块'//描述信息
];

调用方式:

<?php
//调用所有配置信息
$config=config('openframe');

//调用某个配置信息
$name=config('openframe.name');

1.4.2. 数据库配置

数据库配置文件位于根目录的.env文件中,格式如下:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=fidis
DB_USERNAME=root
DB_PASSWORD=passw0rd

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

1.4.3. 路由配置

1.4.3.1. web相关路由配置

web路由位于模块的Routes/web.php中,用于注册网页应用的相关路由,格式如下:

<?php
Route::prefix('openframe')->group(function() {
    Route::get('/', 'IndexController@index');
    Route::get('/project', 'IndexController@index');
    Route::get('/result', 'IndexController@index');
});

1.4.3.2. api相关路由配置

api路由位于模块的Routes/api.php中,用于注册相关的api接口路由,格式如下:

<?php
use Illuminate\Http\Request;

Route::middleware('auth:api')->get('/openframe', function (Request $request) {
    return $request->user();
});

1.5. OpenFrame 模块构建

1.5.1. 开发流程

  1. 创建数据表;(若无数据库操作可略过)
  2. 创建模块,修改数据表、菜单、路由配置文件;
  3. 安装模块;
  4. 创建模块控制器类;
  5. 创建模块类、模块函数、模块数据库模型;(简单功能模块可不创建)
  6. 创建模块界面文件;
  7. 运行调试;

1.5.2. 创建模块

复制OpenFrame基础模块到fidis/Modules目录,修改文件夹名称为模块名称,例如创建一个test模块,则只需要将OpenFrame模块复制到fidis/Modules目录下,修改文件夹名称为Test

一个标准模块的文件夹目录结构如下:

Test/
├─ Config/
│   ├─ config.php
│   └─ menu.php
├─ Console/
├─ Database/
│   ├─ factories/
│   ├─ Migrations/
│   └─ Seeders/
│        └─ TestDatabaseSeeder.php
├─ Entities/
├─ Http/
│   ├─ Controllers/
│   │   └─ TestController.php
│   ├─ Middleware/
│   └─ Requests/
├─ Providers/
│   ├─ RouteServiceProvider.php
│   └─ TestServiceProvider.php
├─ Resources/
│   ├─ assets/
│   │   ├─ js/
│   │   │   └─ app.js
│   │   └─ sass/
│   │        └─ app.scss
│   ├─ lang/
│   └─ views
│        ├─ layouts
│        │   └─ master.blade.php
│        └─ index.blade.php
├─ Routes/
│   ├─ api.php
│   └─ web.php
├─ Tests/
├─ composer.json
├─ module.json
├─ package.json
└─ webpack.mix.js

其中:

  • Config:配置文件目录
    • config.php:配置文件
    • menu.php:菜单配置文件
  • Console:自定义的 Artisan 命令
  • Database:数据库操作相关文件夹
  • Entities:相关实例
  • Http:包含控制器、中间件以及表单请求
    • Controllers:存放控制器文件
    • Middleware:存放中间件文件
    • Requests:存放表单请求文件
  • Providers:包含应用的所有服务提供者
  • Resources:包含视图文件和资源文件
    • assets:资源文件
    • js:Js文件
    • sass:Sass文件
    • lang:语言国际化文件
    • views:视图文件
  • Routes:所有定义的路由文件
    • api.php:约束在api中间件组中的路由请求
    • web.php:约束在web中间件组中的路由请求
  • Tests:自动化测试文件
  • composer.json:Composer配置文件
  • module.json:模块信息
  • package.json:Package配置文件
  • webpack.mix.js:Webpack配置文件

模块创建完成后,需要修改相应的数据表、菜单、路由配置文件,如下:

  • 数据表配置


  • 菜单配置

菜单配置文件为位于模块config目录下,例如:Openframe/Config/menu.php,格式如下:

<?php
return [
    [
        'name' => 'Openframe',
        'route'=>'/openframe',
        'params'=>1,
        'description'=>'OpenFrame基础模块',
        'children'=>[
            [
                'name' => '项目列表',
                'route'=>'/openframe/project',
                'params'=>'/project',
                'description'=>'项目列表',
            ],
            [
                'name' => '结果列表',
                'route'=>'/openframe/result',
                'params'=>'/result',
                'description'=>'结果列表',
            ]
        ]
    ]
];
  • 路由配置

    • web相关路由
    <?php
    Route::prefix('openframe')->group(function() {
        Route::get('/', 'IndexController@index');
        Route::get('/project', 'IndexController@index');
        Route::get('/result', 'IndexController@index');
        //项目管理
        Route::prefix('project')->group(function () {
            Route::match(['get', 'post'], '/index','\Modules\Openframe\Http\Controllers\ProjectController@index');
            Route::match(['get', 'post'], 'add', '\Modules\Openframe\Http\Controllers\ProjectController@add');
            Route::match(['get', 'post'], 'edit', '\Modules\Openframe\Http\Controllers\ProjectController@edit');
            Route::match(['get', 'post'], 'detail', '\Modules\Openframe\Http\Controllers\ProjectController@detail');
            Route::match(['get', 'post'], 'delete', '\Modules\Openframe\Http\Controllers\ProjectController@delete');
            Route::match(['get', 'post'], 'enable', '\Modules\Openframe\Http\Controllers\ProjectController@enable');
            Route::match(['get', 'post'], 'disable', '\Modules\Openframe\Http\Controllers\ProjectController@disable');
        });
        //结果管理
        Route::prefix('result')->group(function () {
            Route::match(['get', 'post'], '/index', '\Modules\Openframe\Http\Controllers\ResultController@index');
            Route::match(['get', 'post'], '{name}', function($name){
                $result=new \Modules\Openframe\Http\Controllers\ResultController;
                $result->$name(Request);
            });
        });
    });
    
    • api相关路由
    <?php
    use Illuminate\Http\Request;
    
    Route::middleware('auth:api')->get('/openframe', function (Request $request) {
        return $request->user();
    });
    

1.5.3. 创建模块控制器

应用模块控制器位于[模块名]/Http/Controller目录下,文件名称为[功能]+Controller.php,例如:MenuController.php。控制器类名称与文件名称必须相同。结构如下:

<?php
namespace Modules\OpenFrame\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Cache;

class IndexController extends Controller{
    public function __construct() {

    }
    //注释
    public function index(){
        return view('openframe::index', array('title'=>'智物联'));
    }
}

1.5.4. 创建模块模板界面

应用模块模板界面位于[模块名]/Resources/views/目录下,文件名称以.blade.php结尾,例如:index.blade.php。模板界面使用Laravel框架的Blade模板引擎(英文介绍中文介绍)。

1.5.5. 创建模块数据库模型类

数据库模型位于[模块名]/Models目录下,文件名称格式为[功能]+Model.php,例如:MenuModel.php。结构如下:

<?php
namespace Modules\Openframe\Models;
use Illuminate\Database\Eloquent\Model;

class ProjectModel extends Model{
    public $table='openframe_project';
    public $timestamps = false;
    protected $primaryKey = 'project_id';
}

注意:

  • 数据库模型类名称必须与文件名称相同;
  • 数据库连接配置文件位于系统根目录下的.ENV文件中;
  • protected $primaryKey定义数据表的主键字段;

1.5.6. 模块安装与卸载

1.5.6.1. 模块安装

功能模块复制到Modules目录下后,在模块管理列表中会出现对应的模块信息,点击安装模块功能按钮,会将对应的模块安装到系统中,并记录模块的状态为已安装,创建模块对应的菜单和路由,供其他界面进行调用;

1.5.6.2. 模块卸载

针对已安装的模块,点击卸载模块功能按钮,会卸载相应的功能模块,并删除模块对应的菜单和路由;

1.5.7. 其他

暂无

1.6. 其他说明

1.6.1. 注意事项

暂无

1.6.2. 技术教程

1.6.2.1. Laravel

https://xueyuanjun.com

1.6.2.2. laravel-modules

https://nwidart.com/laravel-modules/v4/introduction

1.6.2.3. Vue

https://vuejs.org/

1.6.3. 其他插件说明

暂无

© Mixlinker all right reserved,powered by Gitbook文件修订时间: 2020-04-28 17:12:08

results matching ""

    No results matching ""