回调
上述每个路由方法都接受一个回调函数作为最后一个参数。这个参数可以是任何可调用的 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 的路由。它接受三个参数:
- 重定向的
from路由模式(可选带有命名占位符) - 要重定向到的位置,可以是一个字符串或 Psr\Http\Message\UriInterface
- 使用的 HTTP 状态码(可选;如果未设置,默认为
302)
$app->redirect('/books', '/library', 301);
redirect() 路由将返回请求的状态码,并在响应中设置 Location 头部为第二个参数的值。