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.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
1.6.2.2. laravel-modules
https://nwidart.com/laravel-modules/v4/introduction
1.6.2.3. Vue
1.6.3. 其他插件说明
暂无