{"id":20144721,"url":"https://github.com/widuu/think-addons","last_synced_at":"2025-03-03T00:11:11.719Z","repository":{"id":57080588,"uuid":"390378215","full_name":"widuu/think-addons","owner":"widuu","description":"tp6 addons ","archived":false,"fork":false,"pushed_at":"2021-08-07T09:00:53.000Z","size":41,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-13T10:50:47.574Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/widuu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-07-28T14:19:50.000Z","updated_at":"2021-08-04T14:24:22.000Z","dependencies_parsed_at":"2022-08-24T14:42:32.017Z","dependency_job_id":null,"html_url":"https://github.com/widuu/think-addons","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/widuu%2Fthink-addons","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/widuu%2Fthink-addons/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/widuu%2Fthink-addons/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/widuu%2Fthink-addons/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/widuu","download_url":"https://codeload.github.com/widuu/think-addons/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241587929,"owners_count":19986628,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T22:11:50.583Z","updated_at":"2025-03-03T00:11:11.698Z","avatar_url":"https://github.com/widuu.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# think-addons\n\n\u003e tp6 (Thinkphp) 插件扩展包，更友好兼容 `Thinkphp` 原生框架。\n\n\u003e插件路由分发器 `think\\addons\\dispatch\\Controller` 继承 `think\\route\\Dispatch`\n\n\u003e插件支持 `event`/`middleware`/`provider` 配置，没有将事件封装成 `hook` 函数，使用原生 `\\think\\facade\\Event` 操作，让开发者能够快速上手，如果你习惯使用 `hook` 函数，只需要将下边的方法添加到 `app\\common.php` 中即可\n\n```\n    /**\n     * 处理插件钩子\n     * @param string $event 钩子名称\n     * @param array|null $params 传入参数\n     * @param bool $once 是否只返回一个结果\n     * @return mixed\n     */\n    function hook($event, $params = null, bool $once = false)\n    {\n        $result = Event::trigger($event, $params, $once);\n\n        return join('', $result);\n    }\n```\n\n\u003e 更细化的配置，能够根据配置来进行按需加载\n\n### 安装\n\n```\ncomposer require widuu/think-addons\n```\n\n### 全局配置\n\n\u003e `config\\addons.php` 文件\n\n```\nreturn [\n    // 插件的 namespace 也是插件目录\n    'app_namespace'           =\u003e 'addons',\n    // 生产环境下，开启自动加载时的缓存名称，方便更新\n    'addons_autoload_cache'   =\u003e 'addons_autoload_cache',\n    // 自动解析加载插件事件，此为全局事件，可以在全局访问\n    'autoload_addons_event'   =\u003e true,\n    // 全局加载插件下的 event.php\n    'autoload_addons_efile'   =\u003e false,\n    // 自动解析服务注册，全局服务，可以在全局访问\n    'autoload_addons_service' =\u003e false,\n    // 自动注册路由\n    'autoload_addons_route'   =\u003e true,\n    // 自动注册命令行\n    'autoload_addons_command' =\u003e true,\n    // 监听事件\n    'addons_event'            =\u003e [],\n    // 注册服务\n    'addons_service'          =\u003e [],\n    // 注册命令行\n    'addons_commands'         =\u003e [],\n    // 注册路由\n    'route'                   =\u003e [],\n];\n```\n\u003e 当运行到某个插件时譬如 `test` 插件，会自动加载插件下的 (公共函数) `common.php` （服务注册） `provider.php` (事件) `event.php` 和 `Test.php` 中的事件。 \n\n\u003e 但是 `provider.php`/`event.php`/`Test.php` 文件中的事件和服务并不全局调用，假如你想在任何地方调用，可以开启上方的自动加载或者将这些配置到对应的配置数组中\n\n\u003e 注：生产环境中（非 `Debug`）模式，会在缓存读取，所以有新的插件记住清除缓存，缓存名称在配置中自定义的。\n\n### 生成插件\n\n\n\u003e 使用如下命令行可以自动生成插件\n\n```\nphp think addon:build 模块名称\n```\n\n\u003e 目录如下\n\n```html\nwww  WEB部署目录（或者子目录）\n├─addons           插件目录\n│  ├─test            test 插件目录\n│  │  ├─controller         控制器目录\n│  │  ├─model              模型目录\n│  │  ├─ ...               更多类库目录\n│  │  │\n│  │  ├─Test.php           插件类继承 think\\Addons\n│  │  ├─info.ini           插件信息\n│  │  ├─config.php         插件配置\n│  │  ├─common.php         公共函数文件\n│  │  ├─middleware.php     中间件文件\n│  │  ├─provider.php       服务注册文件\n│  │  └─event.php          事件定义文件\n├─app           应用目录\n├─config                配置目录\n│  ├─addons.php         插件配置\n│  └─ ...               更多配置\n├─view                  视图目录\n├─route                 路由定义目录 \n├─public                WEB目录（对外访问目录）\n├─extend                扩展类库目录\n├─runtime               应用的运行时目录（可写，可定制）\n├─vendor                Composer类库目录\n├─.example.env          环境变量示例文件\n├─composer.json         composer 定义文件\n├─LICENSE.txt           授权说明文件\n├─README.md             README 文件\n├─think                 命令行入口文件\n```\n\n\u003e 我们插件实现类中可以通过注释修改事件名称，以 `Test.php` 插件为类\n\n```php\n\u003c?php\n\n\nnamespace addons\\test;\n\n\nuse think\\Addons;\n\n/**\n * Class Test\n * @package addons\\test\n */\nclass Test extends Addons\n{\n\n    /**\n     * @Event(\"AppInit\")\n     */\n    public function init()\n    {\n        echo \"监听 AppInit 事件\";\n    }\n\n    /**\n     * @Event([\"AppInit\", \"HttpRun\"])\n     */\n    public function run()\n    {\n        echo \"监听 AppInit 和 HttpRun 事件\";\n    }\n\n    /**\n     * 没有使用注释，直接监听方法名，监听 AddonsInit 事件\n     */\n    public function AddonsInit()\n    {\n        echo \"监听 AddonsInit 事件\";\n    }\n\n    protected function install()\n    {\n        // TODO: Implement install() method.\n    }\n\n    protected function uninstall()\n    {\n        // TODO: Implement uninstall() method.\n    }\n\n    protected function enable()\n    {\n        // TODO: Implement enable() method.\n    }\n\n    protected function disable()\n    {\n        // TODO: Implement disable() method.\n    }\n}\n```\n\n### 插件公共方法\n\n```\n    /**\n     * 获取插件类名\n     * @param $name\n     * @param null $class\n     * @param string $type\n     * @return string\n     */\n    function get_addons_class($name, $class = null, $type = '')\n\n    /**\n     * 获取插件实例\n     * @param $name\n     * @return false|mixed\n     */\n    function get_addons_instance($name)\n\n    /**\n     * 获取应用信息\n     * @param $name\n     * @return array\n     */\n    function get_addons_info($name): array\n\n    /**\n     * 插件显示内容里生成访问插件的url\n     * @param $url  string 插件名/控制器/方法\n     * @param array $param\n     * @param bool|string $suffix 生成的URL后缀\n     * @param bool|string $domain 域名\n     * @return bool|string\n     */\n    function addons_url($url = '', $param = [], $suffix = true, $domain = false)\n```\n\n\u003e `addons_url` 中的 `$url` 在插件内可以 `controller/action` 或者 `action`，如果全局使用，`addon/controller/action`\n\n\u003e 其它使用方法请参考 thinkphp 手册即可","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwiduu%2Fthink-addons","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwiduu%2Fthink-addons","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwiduu%2Fthink-addons/lists"}