{"id":13757661,"url":"https://github.com/zeromicro/goctl-php","last_synced_at":"2025-04-12T13:21:47.402Z","repository":{"id":57559830,"uuid":"322202163","full_name":"zeromicro/goctl-php","owner":"zeromicro","description":"goctl php plugin","archived":false,"fork":false,"pushed_at":"2025-02-24T10:02:16.000Z","size":105,"stargazers_count":22,"open_issues_count":2,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-09T16:14:49.587Z","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":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zeromicro.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":"2020-12-17T06:28:55.000Z","updated_at":"2025-02-24T10:02:22.000Z","dependencies_parsed_at":"2022-08-27T10:51:30.209Z","dependency_job_id":null,"html_url":"https://github.com/zeromicro/goctl-php","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeromicro%2Fgoctl-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeromicro%2Fgoctl-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeromicro%2Fgoctl-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeromicro%2Fgoctl-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zeromicro","download_url":"https://codeload.github.com/zeromicro/goctl-php/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248571848,"owners_count":21126524,"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-08-03T12:00:44.192Z","updated_at":"2025-04-12T13:21:47.390Z","avatar_url":"https://github.com/zeromicro.png","language":"PHP","funding_links":[],"categories":["Tools and plugins for [go-zero](https://github.com/tal-tech/go-zero)"],"sub_categories":[],"readme":"# goctl-php\n\n![go-zero](https://img.shields.io/badge/Github-go--zero-brightgreen?link=https://github.com/zeromicro/go-zero\u0026logo=github)\n![License](https://img.shields.io/badge/License-MIT-blue?link=https://github.com/zeromicro/goctl-android/blob/main/LICENSE)\n![Go](https://github.com/zeromicro/goctl-android/workflows/Go/badge.svg)\n\ngoctl-php是一款基于goctl的插件，用于生成 php 调用端（服务端） http server请求代码。\n本插件特性：\n* 仅支持post json\n* 支持get query参数\n* 支持path路由变量\n* 仅支持响应体为json\n\n\u003e 警告：本插件是对goctl plugin开发流程的指引，切勿用于生产环境。\n\n# 插件使用\n* 编译goctl-php插件\n    ```shell script\n    $ GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/zeromicro/goctl-php\n    ```\n* 将`$GOPATH/bin`中的`goctl-php`添加到环境变量\n* 创建api文件\n    ```go\n    info(\n    \ttitle: \"type title here\"\n    \tdesc: \"type desc here\"\n    \tauthor: \"type author here\"\n    \temail: \"type email here\"\n    \tversion: \"type version here\"\n    )\n    \n    \n    type (\n    \tRegisterReq {\n    \t\tUsername string `json:\"username\"`\n    \t\tPassword string `json:\"password\"`\n    \t\tMobile string `json:\"mobile\"`\n    \t}\n    \t\n    \tLoginReq {\n    \t\tUsername string `json:\"username\"`\n    \t\tPassword string `json:\"password\"`\n    \t}\n    )\n    \n    service user-api {\n    \t@doc(\n    \t\tsummary: \"注册\"\n    \t)\n    \t@handler register\n    \tpost /api/user/register (RegisterReq)\n    \t\n    \t@doc(\n    \t\tsummary: \"登录\"\n    \t)\n    \t@handler login\n    \tpost /api/user/login (LoginReq)\n    }\n    ```\n* 生成php代码\n    \n    ```shell script\n    $ goctl api plugin -plugin goctl-php=\"php -namespace Tal\" -api user.api -dir .\n    ```\n    \u003e说明： 其中`goctl-php`为可执行的二进制文件，`\"php -namespace Tal\"`为goctl-plugin自定义的参数，这里需要用引号`\"\"`引起来。\n\n我们来看一下生成php代码后的目录结构\n```text\n├── bean\n│   ├── LoginReq.php\n│   ├── RegisterReq.php\n├── service\n│   ├── IService.php\n│   └── Service.php\n└── user.api\n```\n\n\u003e [点击这里]() 查看php示例源码\n\n\u003e 本插件是基于 php 的 curl 这个 c 扩展来实现http请求，php.ini 文件需要开启此扩展。\n\n```ini\n; 需要开启这个 c 扩展。\nextension=curl\n```\n\n* 编写测试\n```php\n//todo\n```\n\n* 请求结果\n    * client log\n    ```text\n    register success\n    login success\n    search:{\"age\":20,\"birthday\":\"1991-01-01\",\"description\":\"coding now\",\"name\":\"zeromicro\",\"tag\":[\"Golang\",\"Php\"]}\n    userInfo:{\"age\":20,\"birthday\":\"1991-01-01\",\"description\":\"coding now\",\"name\":\"zeromicro\",\"tag\":[\"Golang\",\"Php\"]}\n    ```\n    \n    * server log\n    ```text\n    Login: {Username:zeromicro Password:111111}\n    Register: {Username:zeromicro Password:1111 Mobile:12311111111}\n    ```\n\n# 插件开发流程\n\n* 自定义参数\n    ```go\n    commands = []*cli.Command{\n        {\n            Name:   \"android\",\n            Usage:  \"generates http client for android\",\n            Action: action.Android,\n            Flags: []cli.Flag{\n                \u0026cli.StringFlag{\n                    Name:  \"package\",\n                    Usage: \"the package of android\",\n                },\n            },\n        },\n    }\n    ```\n\n* 获取goctl传递过来的json信息\n    * 利用goctl中提供的方法解析\n        ```go\n        plugin, err := plugin.NewPlugin()\n        if err != nil {\n            return err\n        }\n        ```\n  \n    * 或者自定义结构体去反序列化\n  \n        ```go\n        var plugin generate.Plugin\n        plugin.ParentPackage = pkg\n        err = json.Unmarshal(std, \u0026plugin)\n        if err != nil {\n            return err\n        }\n        ```\n\n* 实现插件逻辑\n    ```go\n    generate.Do(plugin)\n    ```\n\n\u003e说明：上述摘要代码来自goctl-php,完整信息可浏览源码。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeromicro%2Fgoctl-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzeromicro%2Fgoctl-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeromicro%2Fgoctl-php/lists"}