phore/micro-app

用于 REST API 服务的微框架

v0.3.1 2021-02-28 18:41 UTC

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"];
}