therion/framework

一个小型框架

v1.1.1 2023-08-18 20:36 UTC

This package is auto-updated.

Last update: 2024-08-30 01:38:04 UTC


README

如何使用

1. 安装

composer require therion/framework

2. 配置

您需要添加两个返回 http 数组的文件

  1. modules.php,它返回您的 moduleFactories 的类名
  2. services.php,它返回您需要的服务(例如 MysqlServce, MongoService 等。)

您还需要一个额外的文件,它返回一个用于 cli 的数组:cli-modules.php,它返回您的 cliModuleFactories 的类名

3. 在您的 index.php 中加载应用程序

$di = Application::registerApp(AppType::HTTP, $loadedModules, $loadedServices);

$di = Application::registerApp(AppType::CLI, $loadedCliModules, $loadedServices);

4. 加载您的路由

$di->getRouter()->route()->send(); 方法 send 返回来自处理器的响应。

注意:如果需要错误处理,请在此处插入

5. 处理器和模块

模块工厂需要实现 ModuleFactoryInterface。该接口请求注册路由的 registerRoutes 函数,这是注册路由所需的:)

处理器需要实现 HandlerInterface 接口。该接口请求执行函数,应在其中插入执行代码。

6. 请求和响应

您可以添加新的请求和响应类型,它们只需实现框架的 RequestInterfaceResponseInterface。框架默认响应是 JsonResponse

7. 加载服务

如果服务在服务配置中注册,则服务将被自动加载。

注意:如果您需要不是服务的参数,例如,可以使用以下行: Service::class => ['param1', 2, 'param3']。例如,这需要您的 DBService 或 TemplateEngineService

您还可以使用静态构造参数加载您的模块。

8. 注册模块类

在您的模块工厂中,您可以通过将它们添加到 DI 容器中,添加处理器或其他类: $this->di->getContainer()->register(ExampleHandler::class)

如果您只填充了注册函数的第一个参数,则在代码中您必须调用具有此名称的加载函数。(这意味着第二个参数是可空的)

您可以装饰类名。您必须使用第二个参数调用注册函数。第一个参数现在是一个标签,第二个参数是确切的类名。例如: ->register(SomeInterface::class, YourClass::class)。现在您可以通过加载该接口来加载 YourClass: ->load(SomeInterface::class)

如果有其他类的依赖项,您需要先注册它们。

9. 注册路由

在您的模块工厂中,您可以在 registerRoutes 函数中注册新的路由。

您可以使用路由的公共函数添加新路由。

registerGetRoute()

registerPostRoute()

registerPutRoute()

registerDeleteRoute()

第一个参数始终是唯一的路由名称

第二个参数是 uri,例如 /example

第三个参数是要调用此路由的处理器

最后一个参数是路由参数的数组

  • 如果您的 uri 如 /example/{id}/something
  • 数组需要如下所示: ['id' => '\d+']
  • 键是在您的路由 uri 中定义的名称,值是该变量的正则表达式(因此您可以为此变量添加任何您想要的内容,并且它将在请求中作为路由参数可用)

10. 注册可调用

您可以在 DI 中注册可调用。例如,对于类的静态初始化,如请求的 ::fromGlobals() 方法(见 11。)

您可以通过使用容器的 registerCallable(string $className, callable $callback) 方法来注册它们。

您可以使用容器中的 loadCallable(string $className) 方法来加载条目。注意该方法执行可调用方法。

11. 使用静态参数注册类

您可以使用静态参数注册类,例如 defaultUserId 或其他。

为此,您需要在 DI-容器的注册函数中传递参数。

    $di->getContainer()->register(YourClass:class, null, ['value1', 'value2']

您还可以命名您的参数:(不推荐,但对于复杂类是可能的...性能!)

    $di->getContainer()->register(YourClass:class, null, ['paramName2' => 'value2', 'paramName1' => 'value2']

DI 将参数与其正确位置匹配。

12. 注册您自己的请求或响应类

您可以通过将它们添加到 DI 中来注册您自己的请求或响应类。有两种方法可以添加它们

services.php 用于整个项目

return [
    HttpRequest::class, fn() => HttpRequest::fromGlobals(),
    HttpResponse::class, fn() => new HttpResponse()
];

在模块工厂中

    $this->di->getContainer()->registerCallable(RequestInterface::class, fn() => HttpRequest::fromGlobals());
    $this->di->getContainer()->registerCallable(ResponseInterface::class, fn() => new HttpResponse(''));

13. 使用中间件

该框架支持通过替换默认的 HttpRouter 为您自己的路由对象来使用中间件。在这个类中,您可以通过路由添加中间件。

AppType:Cli

命令行部分与 HTTP 部分相同,有一些变化。您总是将 "cli" 放在您的接口名称中:CliHandlerInterfaceCliModuleFactoryInterface

DI 和其他类几乎相同。不同之处在于处理程序,您在执行方法中不会有返回值。您没有请求,而是有 Arguments,这是对您的 $argv 的包装类。

您可以在您的 CliHandlers 中始终使用 CliFunctions,它们默认注入。