当前位置: 首页 > news >正文

Fastadmin---开发插件

最近发现一个非常不错的框架,作为资深的PHP开发人员,早听过,但是没有实际使用过。然后这段时间做了一个系统,就是用Fastadmin做的,完全基于插件就可以实现60%的功能。

额外的一些功能就需要自己来开发了。但是由于系统还得升级,直接改代码不合适,所以就得开发框架,这个有点让我想起了很久很久以前的OneThink也是功能差异化,都是通过开发插件来实现。

参考文档:

1、Fastadmin框架文档

https://doc.fastadmin.net/doc/faq.html

2、FastAdmin插件开发教程

https://ask.fastadmin.net/article/324.html

3、创建插件文档

https://doc.fastadmin.net/developer/78.html

让我来!

一、创建插件

根目录执行命令

php think addon -a mydemo -c create

然后在addons就创建好了:

image

创建名称:最好只使用英文字母。

通过 http://www.example.com/addons/mydemo 访问,如果出现这样就说明插件创建成功了。

image

此时这里访问的控制器就是:controller/index.php 下的Index方法

同时在后台也会有个这种的提示:

image

如果是需要售卖的插件,需要去查一下名字有没有被用掉:

https://www.fastadmin.net/developer/idcheck.html

二、打包插件

php think addon -a mydemo -c package

这样在 runtime/addons/ 就会生成 mydemo 的压缩文件,然后插件就打包成功了。

三、创建数据库

插件下面新建 install.sql 文件,然后配置数据库信息:

-- ----------------------------
-- Table structure for __PREFIX__mydemo_list
-- ----------------------------
CREATE TABLE IF NOT EXISTS `__PREFIX__mydemo_list` (`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',`pid` int(10) DEFAULT NULL COMMENT '父id',`title` varchar(100) DEFAULT NULL COMMENT '标题',`name` varchar(100) DEFAULT NULL COMMENT '名称',`status` tinyint(1) DEFAULT '1',`creator` int(11) unsigned DEFAULT '0',`update_time` datetime DEFAULT NULL,`allname` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,`price` decimal(10,2) unsigned DEFAULT '0.00' COMMENT '价格',`weigh` int(10) DEFAULT '0',`pay_type` tinyint(1) DEFAULT '1',PRIMARY KEY (`id`) USING BTREE,KEY `pid` (`pid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='列表表';

四、配置文件

插件下有个 config.php 文件夹,用于插件参数的配置,配置好后,可以在插件的配置里面进行配置:

image

五、控制器

与Thinkphp5有很多的不同:

1、控制器的基类

插件控制器基类为:\think\addons\Controller
ThinkPHP5控制器基类为:\think\Controller

2、请求URL不同

插件控制器请求方法为:http://www.fa.com/addons/mydemo/控制器名/方法
ThinkPHP5控制器请求方法为:http://www.fa.com/模块名/控制器名/方法

3、使用层级控制不同

插件控制器请求方法为:http://www.fa.com/addons/mydemo/目录名.控制器名/方法
ThinkPHP5控制器请求方法为:http://www.fa.com/模块名/目录名.控制器名/方法

4、控制器请求

http://www.fa.com/addons/mydemo/控制器名/控制器方法

FastAdmin插件控制器的基类控制器\think\addons\Controller位于vendor/karsonzhang/fastadmin-addons/src/addons/Controller.php。

5、基类属性

protected $addon = null; //插件名称
protected $controller = null; //控制器名称
protected $action = null; //方法名称
/*** 无需登录的方法,同时也就不需要鉴权了* @var array*/
protected $noNeedLogin = ['*'];
/*** 无需鉴权的方法,但需要登录* @var array*/
protected $noNeedRight = ['*'];
/*** 权限Auth,如果用户是登录状态,可以直接从中读取用户信息* @var Auth*/
protected $auth = null;/*** 布局模板,默认不启用* @var string*/
protected $layout = null;

六、视图

视图位于:addons/mydemo/view 目录

七、模型

1、模型存放位置

addons/mydemo/model/User.php

2、模型命名空间

addons\mydemo\model

3、正确的写法

namespace addons\mydemo\model;use think\Model;class User extends Model
{}

八、创建菜单

一般插件都会有管理菜单,常在addons/mydemo/Mydemo.php 中添加代码:

<?phpnamespace addons\mydemo;use app\common\library\Menu;
use app\common\model\User;
use fast\Date;
use think\Addons;
use think\Config;
use think\Request;
use think\Route;/*** Mydemo插件*/
class Mydemo extends Addons
{protected $menu = [['name'    => 'mydemo', //权限规则标识,首个菜单标识必须和插件标识相同'title'   => 'Mydemo管理', //菜单标题'icon'    => 'fa fa-map-marker', //菜单按钮,可使用Font-Awesome的图标'ismenu'  => 1, //是否为菜单'weigh'   => 1, //权重,值越大越靠前'remark'  => 'Demo管理描述内容', //菜单描述内容,在列表处显示'sublist' => [ //子菜单配置,子菜单name必须以 插件标识/ 开始,这里如 mydemo/["name"  => "mydemo/signin/index","title" => "查看"],["name"  => "mydemo/signin/add","title" => "添加"],["name"  => "mydemo/signin/edit","title" => "编辑"],["name"  => "mydemo/signin/del","title" => "删除"],["name"  => "mydemo/signin/multi","title" => "批量更新"],]]];/*** 插件安装方法* @return bool*/public function install(){Menu::create($this->menu);return true;}/*** 插件卸载方法* @return bool*/public function uninstall(){Menu::delete("mydemo");return true;}/*** 插件启用方法* @return bool*/public function enable(){Menu::enable("mydemo");return true;}/*** 插件禁用方法* @return bool*/public function disable(){Menu::disable("mydemo");return true;}/*** 插件升级方法* @return bool*/public function upgrade(){//如果菜单有变更则升级菜单Menu::upgrade('mydemo', $this->menu);return true;}/*** 会员中心边栏后* @return mixed* @throws \Exception*/public function userSidenavAfter(){$request = Request::instance();$controllername = strtolower($request->controller());$actionname = strtolower($request->action());$data = ['actionname'     => $actionname,'controllername' => $controllername];return $this->fetch('view/hook/user_sidenav_after', $data);}}

具体参考:

https://doc.fastadmin.net/developer/94.html

九、学习其他插件是怎么开发的?

知道了插件的基本开发方式,在做开发的时候,可以学习其他的插件,比如直接复制其他的插件进行二次开发,或者是通过阅读其他插件的代码,了解怎么开发插件。

1、Notice 插件

image

然后阅读代码:获取用户以及操作其他的模型

image

操作其他模型:

示例1:查询数量

$count = \app\admin\model\notice\Notice::where('to_id', $user['id'])->where('platform', 'user')->where('type','msg')->order('id', 'desc')->whereNull('readtime')->count(); // find(); 查询  paginate(); 分页 

示例2:更新

$result = \app\admin\model\notice\Notice::where('id', 'in',array_column($list->items(), 'id'))->update(['readtime' => time()]);

示例3:调用其他的方法

先引入:

use app\admin\model\notice\AdminMptemplate;

然后使用:

$exist = \app\admin\model\notice\AdminMptemplate::where('admin_id', $adminId)->find();
// 调用模型方法
AdminMptemplate::create(['admin_id' => $adminId,'openid' => $openid,'nickname' => $nickname,'avatar' => $avatar,'unionid' => $unionid
]);

2、获取配置

$config = get_addon_config('alioss');

打完收工!

http://www.jsqmd.com/news/570425/

相关文章:

  • 零代码部署企业级微信智能助手:跨平台容器化方案全指南
  • 如何实现cool-admin(midway版)数据导出进度:后台任务监控与前端展示终极指南
  • 深圳高端腕表维修避坑大全:六城 30 + 品牌故障解析与正规服务指南 - 时光修表匠
  • Java 内存模型(JMM):happens-before、可见性与有序性怎么落到实战
  • HunyuanVideo-Foley开箱即用:基于RTX4090D的私有化部署与快速上手体验
  • OpCore-Simplify:重新定义Hackintosh配置的艺术
  • 别再傻傻分不清!NTC和PTC热敏电阻,从家电维修到电路设计,教你一眼选对
  • Stata大数据处理终极指南:如何用ftools让数据分析速度提升10倍
  • Windows下VMware安装macOS避坑指南:从系统配置到Xcode完美运行
  • Rudist 0.4.3:让 Agent 接管你的Redis
  • 三指拖动功能:跨系统用户的触控手势优化与效率提升方案
  • clHttp报告“上下文已过期,不能再用了”
  • OpenSubdiv高级特性:特征自适应细分与硬件曲面细分
  • 顶礼膜拜一下
  • 深入解析RF测试中的S参数:从阻抗匹配到信号传输的全面指南
  • LogonTracer核心功能深度解析:4624、4625等关键事件ID的实战应用
  • 旧设备复活超实用指南:开源工具助力老Mac系统升级
  • 深圳腕表维修避坑大全:从百达翡丽到浪琴,六城12,000次案例揭示的真相与教训 - 时光修表匠
  • GDScript快速上手:3天从零基础到游戏开发的完整指南
  • Live Avatar镜像免配置实测:手把手教你搭建无限长度数字人视频
  • JavaWEB的三大组件之一---监听器Listener
  • 成都装修行业进入“存量厮杀”阶段:十家机构横向对比,谁在真正兑现“所见即所得”? - 推荐官
  • 宝塔面板访问地址丢失?快速找回的实用指南
  • 零代码部署社区门禁:AI读脸术镜像快速安装教程
  • Livebook共享密钥管理终极指南:团队协作中的安全数据共享解决方案
  • SuGaR与NeRF对比分析:为什么高斯泼溅是未来趋势
  • 2026年全国医师进修办理服务机构深度测评 - 深度智识库
  • 快速体验AI识别:ResNet18镜像部署与使用完整教程
  • CHORD-X在MATLAB数据分析工作流中的应用:自动生成仿真实验报告
  • Keil工程窗口那些带叹号、星号、钥匙的图标,到底在提醒你什么?