PHPackages                             widuu/think-addons - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. widuu/think-addons

ActiveLibrary[Framework](/categories/framework)

widuu/think-addons
==================

thinkphp6 addons support

1.0.1(4y ago)054Apache-2.0PHPPHP &gt;=7.1.0

Since Aug 4Pushed 4y ago1 watchersCompare

[ Source](https://github.com/widuu/think-addons)[ Packagist](https://packagist.org/packages/widuu/think-addons)[ RSS](/packages/widuu-think-addons/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

think-addons
============

[](#think-addons)

> tp6 (Thinkphp) 插件扩展包，更友好兼容 `Thinkphp` 原生框架。

> 插件路由分发器 `think\addons\dispatch\Controller` 继承 `think\route\Dispatch`

> 插件支持 `event`/`middleware`/`provider` 配置，没有将事件封装成 `hook` 函数，使用原生 `\think\facade\Event` 操作，让开发者能够快速上手，如果你习惯使用 `hook` 函数，只需要将下边的方法添加到 `app\common.php` 中即可

```
    /**
     * 处理插件钩子
     * @param string $event 钩子名称
     * @param array|null $params 传入参数
     * @param bool $once 是否只返回一个结果
     * @return mixed
     */
    function hook($event, $params = null, bool $once = false)
    {
        $result = Event::trigger($event, $params, $once);

        return join('', $result);
    }

```

> 更细化的配置，能够根据配置来进行按需加载

### 安装

[](#安装)

```
composer require widuu/think-addons

```

### 全局配置

[](#全局配置)

> `config\addons.php` 文件

```
return [
    // 插件的 namespace 也是插件目录
    'app_namespace'           => 'addons',
    // 生产环境下，开启自动加载时的缓存名称，方便更新
    'addons_autoload_cache'   => 'addons_autoload_cache',
    // 自动解析加载插件事件，此为全局事件，可以在全局访问
    'autoload_addons_event'   => true,
    // 全局加载插件下的 event.php
    'autoload_addons_efile'   => false,
    // 自动解析服务注册，全局服务，可以在全局访问
    'autoload_addons_service' => false,
    // 自动注册路由
    'autoload_addons_route'   => true,
    // 自动注册命令行
    'autoload_addons_command' => true,
    // 监听事件
    'addons_event'            => [],
    // 注册服务
    'addons_service'          => [],
    // 注册命令行
    'addons_commands'         => [],
    // 注册路由
    'route'                   => [],
];

```

> 当运行到某个插件时譬如 `test` 插件，会自动加载插件下的 (公共函数) `common.php` （服务注册） `provider.php` (事件) `event.php` 和 `Test.php` 中的事件。

> 但是 `provider.php`/`event.php`/`Test.php` 文件中的事件和服务并不全局调用，假如你想在任何地方调用，可以开启上方的自动加载或者将这些配置到对应的配置数组中

> 注：生产环境中（非 `Debug`）模式，会在缓存读取，所以有新的插件记住清除缓存，缓存名称在配置中自定义的。

### 生成插件

[](#生成插件)

> 使用如下命令行可以自动生成插件

```
php think addon:build 模块名称

```

> 目录如下

```
www  WEB部署目录（或者子目录）
├─addons           插件目录
│  ├─test            test 插件目录
│  │  ├─controller         控制器目录
│  │  ├─model              模型目录
│  │  ├─ ...               更多类库目录
│  │  │
│  │  ├─Test.php           插件类继承 think\Addons
│  │  ├─info.ini           插件信息
│  │  ├─config.php         插件配置
│  │  ├─common.php         公共函数文件
│  │  ├─middleware.php     中间件文件
│  │  ├─provider.php       服务注册文件
│  │  └─event.php          事件定义文件
├─app           应用目录
├─config                配置目录
│  ├─addons.php         插件配置
│  └─ ...               更多配置
├─view                  视图目录
├─route                 路由定义目录
├─public                WEB目录（对外访问目录）
├─extend                扩展类库目录
├─runtime               应用的运行时目录（可写，可定制）
├─vendor                Composer类库目录
├─.example.env          环境变量示例文件
├─composer.json         composer 定义文件
├─LICENSE.txt           授权说明文件
├─README.md             README 文件
├─think                 命令行入口文件
```

> 我们插件实现类中可以通过注释修改事件名称，以 `Test.php` 插件为类

```
