{"id":24922841,"url":"https://github.com/twelvet-projects/think-addons","last_synced_at":"2025-03-28T11:16:35.925Z","repository":{"id":57073919,"uuid":"206521070","full_name":"twelvet-projects/think-addons","owner":"twelvet-projects","description":"thinkphp5.1插件扩展","archived":false,"fork":false,"pushed_at":"2020-01-04T09:00:55.000Z","size":31,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-02-02T11:33:51.052Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/twelvet-projects.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":"2019-09-05T09:05:11.000Z","updated_at":"2023-10-12T08:45:38.000Z","dependencies_parsed_at":"2022-08-24T14:54:48.157Z","dependency_job_id":null,"html_url":"https://github.com/twelvet-projects/think-addons","commit_stats":null,"previous_names":["twelvet-projects/think-addons"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twelvet-projects%2Fthink-addons","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twelvet-projects%2Fthink-addons/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twelvet-projects%2Fthink-addons/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twelvet-projects%2Fthink-addons/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/twelvet-projects","download_url":"https://codeload.github.com/twelvet-projects/think-addons/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246017722,"owners_count":20710240,"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":"2025-02-02T11:33:52.066Z","updated_at":"2025-03-28T11:16:35.904Z","avatar_url":"https://github.com/twelvet-projects.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# think-addons\nThe ThinkPHP 5.1 Addons Package\n\n# 起源\n\u003e https://github.com/zz-studio/think-addons\n# \n感谢以上项目带给TwelveT的开源支持\n\n## 安装\n\u003e composer require 12tla/think-addons\n\n## 配置\n### 公共配置\n```\n'addons'=\u003e[\n    // 是否自动读取取插件钩子配置信息（默认是关闭）\n    'autoload' =\u003e false,\n    // 当关闭自动获取配置时需要手动配置hooks信息\n    'hooks' =\u003e [\n\t    // 可以定义多个钩子\n        'testhook'=\u003e'test' // 键为钩子名称，用于在业务中自定义钩子处理，值为实现该钩子的插件，\n\t\t\t\t\t// 多个插件可以用数组也可以用逗号分割\n\t]\n]\n```\n或者在\\config目录中新建`addons.php`,内容为：\n```\n\u003c?php\nreturn [\n\t// 是否自动读取取插件钩子配置信息（默认是关闭）\n    'autoload' =\u003e false,\n    // 当关闭自动获取配置时需要手动配置hooks信息\n    'hooks' =\u003e [\n        // 可以定义多个钩子\n        'testhook'=\u003e'test' // 键为钩子名称，用于在业务中自定义钩子处理，值为实现该钩子的插件，\n                    // 多个插件可以用数组也可以用逗号分割\n    ]\n];\n```\n\n## 创建插件\n\u003e 创建的插件可以在view视图中使用，也可以在php业务中使用\n \n安装完成后访问系统时会在项目根目录生成名为`addons`的目录，在该目录中创建需要的插件。\n\n下面写一个例子：\n\n### 创建test插件\n\u003e 在addons目录中创建test目录\n\n### 创建钩子实现类\n\u003e 在test目录中创建 Widget.php 类文件。注意：类文件首字母需大写\n\n```\n\u003c?php\nnamespace addons\\test;\t// 注意命名空间规范\n\nuse think\\Addons;\n\n/**\n * 插件测试\n * @author byron sampson\n */\nclass Widget extends Addons\t// 需继承think\\addons\\Addons类\n{\n\t// 该插件的基础信息\n    public $info = [\n        'name' =\u003e 'test',\t// 插件标识\n        'title' =\u003e '插件测试',\t// 插件名称\n        'description' =\u003e 'thinkph5.1插件测试',\t// 插件简介\n        'status' =\u003e 0,\t// 状态\n        'author' =\u003e 'byron sampson',\n        'version' =\u003e '0.1'\n    ];\n\n    /**\n     * 插件安装方法\n     * @return bool\n     */\n    public function install()\n    {\n        return true;\n    }\n\n    /**\n     * 插件卸载方法\n     * @return bool\n     */\n    public function uninstall()\n    {\n        return true;\n    }\n\n    /**\n     * 实现的testhook钩子方法\n     * @return mixed\n     */\n    public function testhook($param)\n    {\n\t\t// 调用钩子时候的参数信息\n        print_r($param);\n\t\t// 当前插件的配置信息，配置信息存在当前目录的config.php文件中，见下方\n        print_r($this-\u003egetConfig());\n\t\t// 可以返回模板，模板文件默认读取的为插件目录中的文件。模板名不能为空！\n        return $this-\u003efetch('info');\n    }\n\n}\n```\n\n### 创建插件配置文件\n\u003e 在test目录中创建config.php类文件，插件配置文件可以省略。\n\n```\n\u003c?php\nreturn [\n    'display' =\u003e [\n        'title' =\u003e '是否显示:',\n        'type' =\u003e 'radio',\n        'options' =\u003e [\n            '1' =\u003e '显示',\n            '0' =\u003e '不显示'\n        ],\n        'value' =\u003e '1'\n    ]\n];\n```\n\n### 创建钩子模板文件\n\u003e 在test目录中创建info.html模板文件，钩子在使用fetch方法时对应的模板文件。\n\n```\n\u003ch1\u003ehello tpl\u003c/h1\u003e\n\n如果插件中需要有链接或提交数据的业务，可以在插件中创建controller业务文件，\n要访问插件中的controller时使用addon_url生成url链接。\n如下：\n\u003ca href=\"{:addons_url('test://Action/link')}\"\u003elink test\u003c/a\u003e\n格式为：\ntest为插件名，Action为controller中的类名[多级控制器可以用.分割]，link为controller中的方法\n```\n\n### 创建插件的controller文件\n\u003e 在test目录中创建controller目录，在controller目录中创建Index.php文件\n\u003e controller类的用法与tp5.1中的controller一致\n\n```\n\u003c?php\nnamespace addons\\test\\controller;\n\nclass Index\n{\n    public function link()\n    {\n        echo 'hello link';\n    }\n}\n```\n\u003e 如果需要使用view模板则需要继承`\\think\\addons\\Controller`类\n\u003e 模板文件所在位置为插件目录的view中，规则与模块中的view规则一致\n\n```\n\u003c?php\nnamespace addons\\test\\controller;\n\nuse think\\addons\\Controller;\n\nclass Action extends Controller\n{\n    public function link()\n    {\n        return $this-\u003efetch();\n    }\n}\n```\n\n## 使用钩子\n\u003e 创建好插件后就可以在正常业务中使用该插件中的钩子了\n\u003e 使用钩子的时候第二个参数可以省略\n\n### 模板中使用钩子\n\n```\n\u003cdiv\u003e{:hook('testhook', ['id'=\u003e1])}\u003c/div\u003e\n```\n\n### php业务中使用\n\u003e 只要是thinkphp5.1正常流程中的任意位置均可以使用\n\n```\nhook('testhook', ['id'=\u003e1])\n```\n\n## 插件目录结构\n### 最终生成的目录结构为\n\n```\ntp5\n - addons\n -- test\n --- controller\n ---- Action.php\n --- view\n ---- action\n ----- link.html\n --- config.php\n --- info.html\n --- Test.php\n - application\n - config\n - thinkphp\n - extend\n - vendor\n - public\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwelvet-projects%2Fthink-addons","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftwelvet-projects%2Fthink-addons","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwelvet-projects%2Fthink-addons/lists"}