FastAdmin插件开发教程之简明开发教程

Karson 10月前 6867

前言
FastAdmin的插件功能基于think-addons进行二次开发,在此向5ini99表示感谢!下面的插件开发文档中的部分内容也是直接引用自think-addons
在开发FastAdmin的插件之前建议你先了解下FastAdmin插件的目录结构说明

新建插件

我们可以在命令行使用命令php think addon -a 插件名称 -c create创建一个插件的默认结构,FastAdmin会在addons目录生成插件的基本信息和文件

插件配置

FastAdmin的插件配置分为插件启动配置、基础配置和扩展配置三个部分

插件启动配置

插件启动配置文件位于application/extra/addons.php,FastAdmin在后台安装或卸载插件时会自动更新此文件,你也可以手动配置插件的启动配置,配置如下

<?php
return [
    // 是否自动读取取插件钩子配置信息(默认是关闭)
    'autoload' => false,
    // 当关闭自动获取配置时需要手动配置hooks信息
    'hooks' => [
        // 可以定义多个钩子
        'testhook'=>'test' // 键为钩子名称,用于在业务中自定义钩子处理,值为实现该钩子的插件,
                    // 多个插件可以用数组也可以用逗号分割
    ]
];

插件基础配置

基础配置对应的是插件文件info.ini,此文件控制着插件的基础信息及开关状态,目前支持以下几个配置信息

name = 插件英文唯一标题
title = 插件标题
intro = 插件介绍
author = 插件作者
website = www.fastadmin.net
version = 1.0.0
state = 1

插件扩展配置

扩展配置对应的是插件文件夹中的config.php,此文件需要返回一个二维数据,此文件后安装以后用户将可以在插件管理中手动修改其中的配置。

return [
    [
        //配置名称,该值在当前数组配置中确保唯一
        'name'    => 'yourname',
        //配置标题
        'title'   => '配置标题',
        //配置类型,支持string/text/number/datetime/array/select/selects/image/images/file/files/checkbox/radio/bool
        'type'    => 'string',
        //配置select/selects/checkbox/radio/bool时显示的列表项
        'content' => [
            '1' => '显示',
            '0' => '不显示'
        ],
        //配置值
        'value'   => '1',
        //配置验证规则,更之规则可参考nice-validator文件
        'rule'    => 'required',
        'msg'     => '验证失败提示文字',
        'tip'     => '字段填写帮助',
        'ok'      => '验证成功提示文字'
    ],
    [
        'name'    => 'yourname2',
        'title'   => '配置标题2',
        'type'    => 'radio',
        'content' => [
            '1' => '显示',
            '0' => '不显示'
        ],
        'value'   => '1',
        'rule'    => 'required',
        'msg'     => '验证失败提示文字',
        'tip'     => '字段填写帮助',
        'ok'      => '验证成功提示文字'
    ]
];

创建插件

创建的插件可以在view视图中使用,也可以在php业务中使用
安装完成后访问系统时会在项目根目录生成名为addons的目录,在该目录中创建需要的插件。
下面写一个例子:

创建test插件

php think addon -a test -c create

创建钩子实现类

在test目录中创建Test.php类文件。注意:类文件首字母需大写
<?php
namespace addons\test;    // 注意命名空间规范

use app\common\library\Menu;
use think\Addons;

/**
 * 插件测试
 */
class Test extends Addons    // 需继承think\addons\Addons类
{
    /**
     * 插件安装方法
     * @return bool
     */
    public function install()
    {
        $menu = [
            [
                'name'   => 'test',
                'title'  => '插件示例',
                'ismenu' => 1,
                'icon'   => 'fa fa-list',
                'remark' => '插件开发示例描述',
            ]
        ];
        Menu::create($menu);
    }

    /**
     * 插件卸载方法
     * @return bool
     */
    public function uninstall()
    {
        Menu::delete('test');
        return true;
    }
    
    /**
     * 插件启用方法
     */
    public function enable()
    {
        Menu::enable('test');
    }

    /**
     * 插件禁用方法
     */
    public function disable()
    {
        Menu::disable('test');
    }

    /**
     * 实现的testhook钩子方法
     * @return mixed
     */
    public function testhook($param)
    {
    // 调用钩子时候的参数信息
        print_r($param);
    // 当前插件的配置信息,配置信息存在当前目录的config.php文件中,见下方
        print_r($this->getConfig());
    // 可以返回模板,模板文件默认读取的为插件目录中的文件。模板名不能为空!
        return $this->fetch('info');
    }
}

创建钩子模板文件

在test目录中创建info.html模板文件,钩子在使用fetch方法时对应的模板文件。
<h1>hello tpl</h1>
如果插件中需要有链接或提交数据的业务,可以在插件中创建controller业务文件,
要访问插件中的controller时使用addon_url生成url链接。
如下:
<a href="{:addon_url('test/link')}">link test</a>
格式为:
test为controller中的类名,link为controller中的方法

创建插件的controller文件

在test目录中创建controller目录,在controller目录中创建Action.php文件
controller类的用法与tp5中的controller一致
<?php
namespace addons\test\controller;
class Action
{
    public function link()
    {
        echo 'hello link';
    }
}
如果需要使用view模板则需要继承\\think\\addons\\Controller
模板文件所在位置为插件目录的view中,规则与模块中的view规则一致
<?php
namespace addons\test\controller;
use think\addons\Controller;
class Action extends Controller
{
    public function link()
    {
        return $this->fetch();
    }
}

使用钩子

创建好插件后就可以在正常业务中使用该插件中的钩子了
使用钩子的时候第二个参数可以省略

模板中使用钩子

<div>{:hook('testhook', ['id'=>1])}</div>

php业务中使用

只要是thinkphp5正常流程中的任意位置均可以使用
hook('testhook', ['id'=>1])

插件目录结构

最终生成的目录结构为

项目目录
 - addons
 -- test
 --- controller
 ---- Action.php
 --- view
 ---- action
 ----- link.html
 --- config.php
 --- info.ini
 --- info.html
 --- Test.php
 - application
 - thinkphp
 - extend
 - vendor
 - public
最后于 3月前 被Karson编辑
最新回复 (24)
  • lnlingyuan 10月前
    感谢TA
    0 引用 2

    留个记号

  • cncbec 9月前
    感谢TA
    0 引用 3

    留个标记

  • leeyunj 8月前
    感谢TA
    0 引用 4

    留个记号

  • yuyao 8月前
    感谢TA
    0 引用 5

  • Lockin 8月前
    感谢TA
    0 引用 6

    留个记号

  • leeyunj 7月前
    感谢TA
    0 引用 7

    留个记号,很有帮助的一个帖子

  • zxh32017 6月前
    感谢TA
    0 引用 8

  • xuaimin 6月前
    感谢TA
    0 引用 9

    mark

  • fengha 6月前
    感谢TA
    0 引用 10

    为什么我用命令行 php think addon -a 插件名 -c create在addons目录下只生成三个文件
    --- config.php
    --- info.ini
    --- Test.php
    ,而是没有生成
    项目目录
    - addons
    -- test
    --- controller
    ---- Action.php
    --- view
    ---- action
    ----- link.html
    --- config.php
    --- info.ini
    --- info.html
    --- Test.php
    - application
    - thinkphp
    - extend
    - vendor
    这样的目录呢?具体要怎么实现

  • tswh 6月前
    感谢TA
    0 引用 11

    @fengha 我也出现这种问题了,目前出现这个问题的原因你找到了吗

  • lixiaobai 5月前
    感谢TA
    0 引用 12

    :sos:

  • F4NNIU 打赏 5月前
    感谢TA
    0 引用 13

    @fengha 自行增加,可能参考现有的插件。

    最后于 5月前 被F4NNIU编辑
  • npfang 5月前
    感谢TA
    0 引用 14

    这几个文件里的代码应该是什么怎么的。对应哪个。不明是理。一句话。参考现在插件
    安装的程序 根本就没有插件好吗。晕认真些。

  • Karson 楼主 打赏 5月前
    感谢TA
    0 引用 15

    @npfang 插件市场有许多免费插件,都可以下载下来再对应起文档看一下。

  • 感谢TA
    0 引用 16

    https://cdn.forum.fastadmin.net/uploads/201803/01/0336079f94f25e4aa557337d99da385f
    框起来的这个'Options' => [
    ...
    ]
    好像和文档上说的不太一样 ,要改成content才能正常使用。标记一下。。

  • yaoleic 3月前
    感谢TA
    0 引用 17

    写自己的插件每次都会覆盖,不明所yi

  • yaoleic 3月前
    感谢TA
    0 引用 18

    怎么安装

  • RonyLee 1月前
    感谢TA
    0 引用 19

    怎么访问?

  • seanPan 1月前
    感谢TA
    0 引用 20

    留个几号,继续学习

  • amlfox 24天前
    感谢TA
    0 引用 21

    留个记号

  • mengxin 22天前
    感谢TA
    0 引用 22

    收藏一下

  • 千鸟 2天前
    感谢TA
    0 引用 23

    还是太简单了,插件的后台菜单没有说到

  • F4NNIU 打赏 2天前
    感谢TA
    0 引用 24
    gm_fire 还是太简单了,插件的后台菜单没有说到

    你好,可以参考现有的插件源码,这个是简明的教程。
    暂时还没有详细的插件教程。

  • 未登录
    26
返回