v0.1.4 2021-06-25 11:25 UTC

This package is auto-updated.

Last update: 2024-08-25 18:14:53 UTC


README

控制器

控制器位于 \*\Controllers\ 目录(继承自 \Zer0\HTTP\AbstractController)。要创建控制器,只需创建一个包含一个或多个公共方法 *Action 的类,并在 conf/Routes 中添加指向它的路径。

在执行任何 *Action 之前,将调用 before(),之后调用 after(),通常在这些方法中执行通用操作,如检查用户授权。

*Action 方法可以返回 \Zer0\HTTP\Responses\* 实例,如果返回值不为 null,则将其以 JSON 格式输出(\Zer0\HTTP\Responses\JSON)。此行为可以在控制器的 renderResponse() 方法中重写。

配置路由

格式如下

getting_started:
    path:     /getting-started/{action}
    defaults: {controller: GettingStarted, action: intro}
    methods: [GET, POST]
    export: [JS]
...
  • path — 该路由的路径,允许在花括号中使用参数(变量)。
  • path_export — 可选路径,在构建 URL 时将代替 path。在使用 CDN 时很有用。
  • defaults — 可选默认值集。
  • methods — 可选允许的方法列表。
  • export — 可选的列表,表示将路由导出到哪里。
  • sort — 可选参数,用于排序,默认为 0。值越小,执行越早。

如果没有指定 action,则默认为 index。Controller 必须指定,以便可以执行请求。

\Zer0\HTTP 类($this->http)有方法

public function url(string $routeName, $params = [], array $query = []): string

允许构建 URL,例如:$this->http->url('getting_started', 'routes', ['foo' => 'bar']); 如上例配置路由 getting_started,则结果为 /getting-started/routes?foo=bar

还可以使用类似的功能在 JavaScript 中使用 — Routes.url()。此时,只能使用具有 export 列表中包含 JS 的路由。

不建议在代码中硬编码 URL。

注意! 请注意,在修改路由配置后,必须执行 cli http build-allmake build-backend)。

常见问题解答

为什么路由在 Nginx 中执行?

这种方法具有以下优点

  1. 路由数量不会影响性能,因为 Nginx 不是像 PHP 编写的请求路由器那样逐个遍历路由列表,而是使用 Btree+ 索引来定位锚定部分的 location',以 O(log n) 的复杂度找到合适的 location。
  2. 可以将不同的路由指向不同的 PHP-FPM 池,并且添加例如 limit_req 这样的功能并不困难。
  3. 甚至不需要读取和存储 PHP 部分的路由配置。