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 中添加代码:

<?php

namespace 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');

打完收工!

posted @ 2026-04-01 11:32  帅到要去报警  阅读(4)  评论(0)    收藏  举报