Skip to content

回调

上述每个路由方法都接受一个回调函数作为最后一个参数。这个参数可以是任何可调用的 PHP 代码,并且默认情况下接受三个参数。

  • Request 第一个参数是一个 Psr\Http\Message\ServerRequestInterface 对象,表示当前的 HTTP 请求。
  • Response 第二个参数是一个 Psr\Http\Message\ResponseInterface 对象,表示当前的 HTTP 响应。
  • Arguments 第三个参数是一个关联数组,包含当前路由命名占位符的值。

向响应中写入内容

你有两种方式可以向 HTTP 响应中写入内容。首先,你可以直接在路由回调函数中使用 echo() 输出内容。这些内容将追加到当前的 HTTP 响应对象中。其次,你可以返回一个 Psr\Http\Message\ResponseInterface 对象。

闭包绑定

如果你使用了 依赖注入容器 并且将 Closure 实例作为路由回调函数,闭包的状态将绑定到容器实例上。这意味着你可以通过 $this 关键字访问 DI 容器实例:

$app->get('/hello/{name}', function ($request, $response, array $args) {
    // 使用应用程序的 HTTP cookie 服务
    $this->get('cookies')->set('name', [
        'value' => $args['name'],
        'expires' => '7 days'
    ]);
});

Info

Slim 不支持使用静态闭包。

重定向辅助函数

你可以使用 Slim 应用程序的 redirect() 方法添加一个将 GET HTTP 请求重定向到不同 URL 的路由。它接受三个参数:

  1. 重定向的 from 路由模式(可选带有命名占位符)
  2. 要重定向到的位置,可以是一个字符串或 Psr\Http\Message\UriInterface
  3. 使用的 HTTP 状态码(可选;如果未设置,默认为 302
$app->redirect('/books', '/library', 301);

redirect() 路由将返回请求的状态码,并在响应中设置 Location 头部为第二个参数的值。