phore / micro-app
用于 REST API 服务的微框架
v0.3.1
2021-02-28 18:41 UTC
Requires
- php: >7.1
- ext-json: *
- ext-yaml: *
- phore/core: *
- phore/di-base: ^2.2.1
- psr/log: ^1.1
Requires (Dev)
This package is auto-updated.
Last update: 2024-08-29 02:30:07 UTC
README
本文档遵循 infracamp 项目中讨论的教育级别文档指南编写。请提问并记录问题。
目标
- 最小占用空间
- 无外部依赖
- 清晰且小的堆栈跟踪
- 流畅的 API
- 基于角色的身份验证
快速链接
- 资产
- 身份验证
- 会话
- OAuth
- 防火墙 ACL
命名约定
为了方便,微应用和库的类不使用 phore_
前缀。 (它不是用于框架功能的框架)
快速入门
index.php
$app = new App(); $app->router ->onGet("/", // Define a Action for HTTP-GET-Requests to / function() { return "Hello world"; // Important: Return true if output was already sent. } ); $app->serve(); // Run the App
安装
我们建议使用 composer
composer require phore/micro-app
路由 (示例)
定义路由(路径)并将它们连接到控制器函数
-
如果浏览器访问
http://domain.xy/hello/world
,则执行该函数$app->router->onGet("/hello/world", function() { echo "Hello World"; return true; });
-
在路由中定义参数(前缀
:
)和可选参数(?
)$app->router->onGet("/api/create/:userId/:userName?", function(RouteParams $routeParams) { echo "Hello {$routeParams->get("userId")} - {$routeParams->get("userName", 'Default Username')}"; return true; });
$routeParams
会自动由依赖注入生成。 -
将请求委托给一个单独的类:查看示例
$app->router->delegate("/admin/*", AdminController::class);
-
添加控制器类
class ActionCtrl { const ROUTE = "/v1/some/route" public function on_get(){} } $app->addCtrl(ActionCtrl::class);
控制器函数中的参数由依赖注入生成,可能包含在 DiContainer 中定义的任何服务。
特定于请求的参数是
依赖注入
app-class 是一个依赖注入容器。您可以使用 define()
方法注册值或服务。
-
将值定义到属性
version
$app->define("version", new DiValue("1.0.1")); echo $app->version;
-
将工厂定义到属性
configFile
$app->define("configFile", new DiService(function() { return file_get_contents("config-file.json") }); echo $app->configFile;
错误处理
系统具有内置的错误处理功能
- 激活
json
错误/异常处理$app->setOnExceptionHandler(new JsonExceptionHandler());
API 使用:默认结果处理器
框架使用结果处理器来格式化控制器中 return
返回的结果,而不是自己格式化结果。
$app->setDefaultResultHandler(new JsonResultHandler());
在控制器中,您可以只需返回数据
$app->get("/", function() { return ["data"=>"someData"]; }