{"id":17825885,"url":"https://github.com/lolly-studio/lyapi","last_synced_at":"2025-03-30T11:31:37.099Z","repository":{"id":57021178,"uuid":"147002945","full_name":"lolly-studio/lyapi","owner":"lolly-studio","description":"一个有趣的 PHP 开发框架【 Gitee Star 100+ 】","archived":false,"fork":false,"pushed_at":"2024-11-10T08:55:48.000Z","size":1714,"stargazers_count":18,"open_issues_count":0,"forks_count":9,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-24T02:08:21.282Z","etag":null,"topics":["api","composer-project","framework","framework-php","php"],"latest_commit_sha":null,"homepage":"https://lyapi.mrxzx.info","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/lolly-studio.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-09-01T13:59:17.000Z","updated_at":"2024-11-10T08:55:45.000Z","dependencies_parsed_at":"2024-10-27T07:41:52.025Z","dependency_job_id":null,"html_url":"https://github.com/lolly-studio/lyapi","commit_stats":{"total_commits":2,"total_committers":1,"mean_commits":2.0,"dds":0.0,"last_synced_commit":"2821fde6ee36054202b15596de927eb435b75fda"},"previous_names":["lolly-studio/lyapi","mrxiaozhuox/lyapi"],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lolly-studio%2Flyapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lolly-studio%2Flyapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lolly-studio%2Flyapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lolly-studio%2Flyapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lolly-studio","download_url":"https://codeload.github.com/lolly-studio/lyapi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246314011,"owners_count":20757450,"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":["api","composer-project","framework","framework-php","php"],"created_at":"2024-10-27T18:29:47.521Z","updated_at":"2025-03-30T11:31:36.280Z","avatar_url":"https://github.com/lolly-studio.png","language":"PHP","readme":"# LyApi 2.X 🍭\n\n\u003e LyApi 2.X 是全新的 LyApi 版本，更新了整体的架构和代码，让框架变得更加灵活！\n\n## 🍑序言\n\nLyApi 1.X 版本已经维护了将近三年了，也是我很重视的一个项目。但是这个项目始终有着很多问题，很多功能并没有很好的去实现。在这三年里我也学到了很多新东西。渐渐也发现了 LyApi 1.X 的局限性，它无法让我去完成很多我想做的事情。包括一些用户给我的提出的意见：路由系统太水，开发不够灵活，仅仅局限于简单的接口开发。于是乎我决定开发了这个 2.X 版本，它是一个从头开始的框架，所有的代码都进行了重写：路由系统、缓存系统、视图系统、控制器系统、模板引擎、以及部分常用的数据结构模板。 \n\n[ 快速前往LyApi 1.X 🛶 ](https://gitee.com/mrxzx/LyApi/tree/V1.X/)\n\n[ LyDev 开发思路 🎊 ](https://blog.wwsg18.com/index.php/archives/58/)\n\n\n## 🍍特点\n\n- 路由系统：丰富的自定义选项。支持动态参数定义，动态控制器等。\n- 日志系统：轻量级日志生成系统，支持类型分类等功能。\n- 缓存系统：文件缓存支持简单的增删改查，以及缓存分类等功能。\n- 结果类型：根据不同父类可生成不同的返回数据，自带 **JSON** 和 **HTML** 。\n- 数据结构：内置 堆、栈、树、字典树等常用数据结构程序，可快速创建与调用。\n- 数据访问：内置 Medoo 轻量级库，可快速对各种数据库进行访问以及操作。\n- 异常处理：框架对所有异常信息进行分类处理，并可调用不同的自定义控制器。\n- 在线管理：内置强大的拓展系统，与自带拓展 LyDev 配合即可完成在线管理功能。\n\nPS: 本框架引入了很多 **PHP** 的新特性，所以需要使用 7.X 以上的版本运行。\n\n## 🥝演示\n\n\u003e 以下提供部分代码演示，可自行查看需要的功能。\n\n\n### 🌈​ 路由系统\n\n```php\n// 基础路由注册（访问根目录则指向 Main.index 控制器）\nRoute::rule(\"/\", \"Main.index\"); \n\n// 动态控制器注册（根据路径不同，注册到不同控制器）\nRoute::rule(\"/{letter}\", \"Main.{1}\"); \n\n// 类似于 LyApi 1.X 的自动指向控制器 的实现\nRoute::rule(\"/{any}\", \"{1}\")::afterDefine(function ($c) {\n    $c = str_replace(\"/\", \".\", $c);\n    return $c;\n});\n\n// 过滤器，当闭包结果为 False 则会拦截请求并报出相应的异常信息\nRoute::rule(\"/debug/{letter}\", \"Debug.{1}\")::filter(function () {\n    return Config::dotConfig('app.open_debug');\n}, HTTP_NOT_FOUND);\n\n```\n\n### 🍩控制器\n\n```php\n// 根据不同继承的类，本控制器所生成的数据结果将不一样\n// ViewCon 是普通的HTML代码，ApiCon 则会生成JSON代码 (可自定义)\nclass Main extends ViewCon\n{\n    // 接受两个参数，Request 和 Response\n    public function index($req, $resp)\n    {\n        // 返回结果不会直接输出，框架将根据父类的生成规则进行处理后再输出结果。\n        // View::render 会使用模板引擎进行渲染。\n        return View::render('index', []);\n    }\n}\n```\n\n### 🎨 错误抛出\n\n```php\n// 框架支持在任何地方抛出异常，并结束处理程序\nResponse::abort(404); // 抛出一个 404 异常\nResponse::abort(HTTP_NOT_FOUND); // 使用常量表示会更加的优雅\nabort(HTTP_NOT_FOUND); // 使用助手函数可直接使用 abort 函数\n// Abort 后会调用到定义的 Exception 对象处理，结束后将结束程序运行\n```\n\n\n\n### ⚾错误处理\n\n```php\nclass Exception extends ViewCon\n{\n    // 当错误处理器无法查找到相关函数，则会默认调用 _default 函数\n    public function _default($req, $resp)\n    {\n        // 通过 HTTP_CODE 可以取得本次的错误代码\n        $http_code = $req-\u003eoptions['HTTP_CODE'];\n        \n        // 通过 EXCEPTION 可以取得本次的错误对象\n        $exception = $req-\u003eoptions['EXCEPTION'];\n        \n        // 返回的最终结果（HTTP状态码会自动更新，不需要手动提交 header）\n        return \"\u003ch1\u003e\" . $http_code . \" Error!\u003c/h1\u003e\";\n    }\n\n    // 通过 _[HTTP_CODE] 的方式可以定义每个状态码的处理程序\n    public function _404($req, $resp)\n    {\n        // 当你不返回任何值时，浏览器会渲染默认的 404 页面\n        // return \"404 Not Found\";\n        // 这里还是建议渲染自定义的错误文件内容。\n    }\n}\n```\n\n### 🎲事件系统\n\n```php\n// 框架支持你在一些程序前后进行自定义操作。\nEvent::on(\"event_name\",function ($name) {\n    // 当 event_name 被触发时，本闭包函数将被调用\n    echo \"Hello World\";\n});\n\n// 触发一个事件，可以传递参数\nEvent::trigger(\"event_name\",\"mrxiaozhuox\");\n```\n\n### 💾数据库操作\n\n```php\n$conn = Connector::connect(\"mydb\");\n\n// 查询表中所有的数据\n$conn-\u003eselect(\"table_name\",\"*\");\n\n// 删除 id 为 1 的数据\n$database-\u003edelete(\"table_name\", [\n\t\"id\" =\u003e 1\n]);\n\n// 插入一条数据\n$last_user_id = $database-\u003einsert(\"table_name\", [\n    \"user_name\" =\u003e \"mrxiaozhuox\",\n    \"email\" =\u003e \"mrxzx@qq.com\",\n    \"age\" =\u003e 16\n]);\n\n```\n\n## 👨‍🎓作者\n\n作者: mr小卓X\n\nQ Q: 3507952990\n\n交流群: 769094015 (加群提问)\n\n个人博客: http://mrxzx.info\n\nGitee: https://gitee.com/mrxzx/\n\nGitHub: https://github.com/xiaozhuox/\n\nPS: 任何问题直接联系我就行，我会第一时间解决问题。\n\n\n\n## 📔文档\n\n\u003e 文档整理中，近期将完成编写工作。\n\n[项目文档 - 不完整](https://mrxzx.gitee.io/lyapi/)\n\n## 📡合作\n\n### Dorea DB\n\n一款轻量级的 Key-Value 数据库系统，适用于中小型项目。\n\n目前 LyApi 框架已经内置了强大的 `DoreaDB` 驱动，方便开发者快速开发。\n\n\u003e PHP 的存在本身就为了快速开发，还不来试试 DoreaDB 嘛。\n\n- 项目作者：mr小卓X \u003cmrxzx.info@gmail.com\u003e\n- 项目地址：[Dorea KV Database](https://dorea.mrxzx.info/)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flolly-studio%2Flyapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flolly-studio%2Flyapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flolly-studio%2Flyapi/lists"}