- 1、把插件解压到addons目录下载执行,然后打开终端执行命令安装即可
- 2、你可以执行以下命令对插件进行操作,然后你也可以手动调配置进行安装。
// 插件安装 name是插件名称
php think addon install [name]
// 插件卸载
php think addon uninstall [name]
// 插件启用
php think addon enabled [name]
// 插件禁用
php think addon disabled [name]
// 示例说明: 比如你要安装一个为curd的插件
php think addon install curd
- PS: 此目录结构也可称为“应用插件”, app文件夹下内容会安装后就会迁移到app目录下面
├─📂 curd // 插件名称
│ ├─📂 app // 应用目录 (app目录内容会迁移到对应的app下)
│ │ ├─📂 api // 接口应用
│ │ │ ├─📂 controller // 控制器
│ │ │ ├─📂 service // 服务层
│ │ │ ├─📂 validate // 验证层
│ │ │ ├─📂 view // 视图层
│ │ ├─📂 backend // 后台应用
│ │ ├─📂 frontend // 前端应用
│ │
│ ├─📂 public // 此文件夹中所有文件会覆盖到根目录的/public文件夹
│ │
│ ├─📄 config.php // 插件配置文件
│ ├─📄 Plugin.php // 插件类的文件
│ ├─📄 service.ini // 插件服务文件
│ ├─📄 install.sql // 安装SQL
│ ├─📄 uninstall.sql // 卸载SQL
- PS: 此目录结构也可称为“独立插件”, 因为控制器相关代码不会进行迁移
├─📂 curd // 插件名称
│ ├─📂 controller // 控制器
│ ├─📂 model // 模型
│ ├─📂 service // 服务类
│ ├─📂 validate // 验证器
│ ├─📂 view // 视图
│ ├─📂 public // 此文件夹中所有文件会覆盖到根目录的/public文件夹
│ │
│ ├─📄 config.php // 插件配置文件
│ ├─📄 Plugin.php // 插件类的文件
│ ├─📄 service.ini // 插件服务文件
│ ├─📄 install.sql // 安装SQL
│ ├─📄 uninstall.sql // 卸载SQL
- PS: 此目录结构也可称为“独立插件”, 因为控制器相关代码不会进行迁移
├─📂 curd // 插件名称
│ ├─📂 backend // 后台应用
│ │ ├─📂 controller // 控制器
│ │ ├─📂 model // 模型
│ │ ├─📂 service // 服务类
│ │ ├─📂 validate // 验证器
│ │ ├─📂 view // 视图
│ ├─📂 frontend // 前台应用
| | ...
│ ├─📂 public // 此文件夹中所有文件会覆盖到根目录的/public文件夹
│ │
│ ├─📄 config.php // 插件配置文件
│ ├─📄 Plugin.php // 插件类的文件
│ ├─📄 service.ini // 插件服务文件
│ ├─📄 install.sql // 安装SQL
│ ├─📄 uninstall.sql // 卸载SQL
<?php
namespace addons\curd;
use app\common\utils\MenuUtils;
use Exception;
use wait\Addons;
class Plugin extends Addons
{
* 插件名称
* @var string
*/
private string $module = 'curd';
* 插件安装方法
*
* @throws Exception
* @return bool
*/
public function install(): bool
{
$menus = [
[
'name' => $this->module,
'title' => 'Curd',
'perms' => 'addons/curd/gen/index',
'icon' => 'layui-icon icon-seckill-flash',
'is_menu' => 1,
'is_disable' => 0,
'children' => [
['title'=>'生成列表', 'perms'=>'addons/curd/gen/index', 'is_menu'=>0, 'is_disable'=>0],
['title'=>'查看库表', 'perms'=>'addons/curd/gen/tables', 'is_menu'=>0, 'is_disable'=>0]
]
]
];
MenuUtils::create($menus);
return true;
}
* 插件卸载方法
*
* @throws Exception
* @return bool
*/
public function uninstall(): bool
{
MenuUtils::delete($this->module);
return true;
}
* 插件启用方法
*
* @return bool
* @throws Exception
*/
public function enabled(): bool
{
MenuUtils::enable($this->module);
return true;
}
* 插件禁用方法
*
* @return bool
*/
public function disabled(): bool
{
MenuUtils::disable($this->module);
return true;
}
}
name = curd // 插件标识
title = 代码生成器 // 插件标题
description = 一键代码模板生成器 // 插件描述
author = windy // 插件作者
version = 1.0.1 // 插件版本
install = 1 // 是否安装: 1=是, 0=否
status = 1 // 是否启用: 1=是, 0=否
<?php
return [
'status' => [
'title' => '启用前台:',
'type' => 'radio',
'rule' => 'required',
'content' => [
'1' => 'open',
'0' => 'close'
],
'value' => 1,
'msg' => '',
'tips' => ''
],
'image' = [
...
]
]
- 创建好插件后就可以在正常业务中使用该插件中的钩子了 使用钩子的时候第二个参数可以省略
<div>{:hook('testhook', ['id'=>1])}</div>
hook('testhook', ['id'=>1])
* 处理插件钩子事件
*
* @param string $event 钩子名称
* @param array|null $params 传入参数
* @param bool $once 是否只返回一个结果
* @return mixed
*/
hook(string $event, $params = null, bool $once = false);
* 插件显示内容里生成访问插件的url
*
* @param string $url 地址格式:插件名/模块/控制器/方法 或者只有方法
* @param array $param
* @param bool|string $suffix 生成的URL后缀
* @param bool|string $domain 域名
* @return bool|string
*/
addons_url(string $url = '', $param = [], $suffix = true, $domain = false);
* 获取插件基础目录
*
* @param string $name 插件名称
* @return string
*/
addons_path(string $name='');
* 获取插件的单例 (即Plugin.php文件的实例化对象)
*
* @param string $name 插件名
* @return mixed|null
*/
get_addons_instance(string $name)
* 获取插件的配置
*
* @param $name (插件名称)
* @return array
*/
get_addons_config($name);
* 获取插件类的类名
*
* @param string $name 插件名
* @param string $type 返回命名空间类型
* @param null $class 当前类名
* @param string $module 模块名
* @return string
*/
get_addons_class(string $name, string $type = 'hook', $class = null, string $module = 'index');
* 获取本地插件列表
*
* @return array
*/
get_addons_list();
* 读取插件基础信息
*
* @param string $name 插件名
* @return array
*/
get_addons_info(string $name);
* 设置插件信息
*
* @param $name (插件名称)
* @param $array (插件数据)
* @return bool
* @throws Exception
* @author windy
*/
set_addons_info($name, $array);
* 设置插件配置
*
* @param $name (插件名称)
* @param $array (配置数组)
* @return bool
* @throws Exception
*/
set_addons_config($name, $array);
* 刷新插件配置
*
* @return bool
* @throws @\Symfony\Component\VarExporter\Exception\ExceptionInterface
*/
refresh_addons_config();
* 获取插件原始资源目录
*
* @param string $name (插件名称)
* @return string
*/
get_source_assets_dir(string $name);
* 获取插件目标资源目录
*
* @param string $name (插件名称)
* @return string
*/
get_target_assets_dir(string $name);
* 是否有写入权限
*
* @param string $dir
* @return bool
*/
is_really_writable(string $dir);
CREATE TABLE `__PREFIX__addons_article` (
`id` int(10) UNSIGNED NOT NULL,
`title` varchar(20) DEFAULT NULL COMMENT '标题',
`status` tinyint(1) DEFAULT '1' COMMENT '状态',
`sort` smallint(6) DEFAULT '50' COMMENT '排序',
`is_delete` tinyint(6) NOT NULL DEFAULT '0' COMMENT '是否删除: 0=否, 1=是',
`create_time` int(10) NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(10) NOT NULL DEFAULT 0 COMMENT '更新时间',
`delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '删除时间',
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文章表';
drop table if exists `__PREFIX__article`;
drop table if exists `__PREFIX__article_category`;