路由与控制器

路由的提供来源于 routing 组件,提供高性能的路由配置和解析处理,良好地支持 RESTful。

路由配置文件存放于 config/routes.php 文件中。

路由配置

在路由回调处理中,控制器不需要编写命名空间,默认在控制器前追加 Http\Controoler 命名空间。

方法路由:
  1. route()->get('/', 'IndexController@sayHello');
  1. route()->post('/', 'IndexController@sayHello');

支持 get, post, put, head, delete 方法

路由组
  1. route()->group('/v1', function () {
  2. route()->get('/', 'IndexController@sayHello');
  3. });

以上路由会在用户访问 /v1/ 或者 /v1 时候进行回调处理

路由模糊匹配
  1. route()->get("/foo/*", "IndexController@sayHello");

此模式会将 /foo 开头的 [\/_a-zA-Z0-9-]+ 匹配地址到控制器当中,通过 fuzzy_path 参数进行获取匹配到的地址。

  1. $request->getAttribute('fuzzy_path');

控制器

路由配置不支持匿名函数回调,因此在核心处理中屏蔽了该功能,用户保持配置文件的清洁与独立,建议开发者使用控制器回调的方式进行处理。

控制器目前存放于 Http 目录中,3.1 版本后将统一控制器入口,同时为TCP、HTTP提供服务, 去除 Http 目录,保留 Controller 目录,其他结构不变

控制器无需继承任何对象,方法均有 辅助函数 提供

  1. namespace Http\Controller;
  2. class IndexController
  3. {
  4. public function sayHello()
  5. {
  6. return json([
  7. 'foo' => 'bar'
  8. ]);
  9. }
  10. }

仔细的朋友不难发现,其实此处的控制器就是一个 "中间件" 的回调处理,如果在 中间件 中逻辑处理错误,是不会进入到控制器中的。

中间件的实现依赖于 Middleware 组件。

如果该路由是动态路由,则参数需要通过 ServerRequestInterface 对象进行访问。

  1. route()->get('/hello/{name}', 'IndexController@sayHello');
  1. namespace Http\Controller;
  2. use FastD\Http\ServerRequest;
  3. class IndexController
  4. {
  5. public function sayHello(ServerRequest $request)
  6. {
  7. return json([
  8. 'name' => $request->getAttribute('name')
  9. ]);
  10. }
  11. }

如此类推。

下一节: 请求