Php Slim Framework 3-响应对象
在我的Slim 3应用程序中,我定义了一个中间件,它将自定义头添加到我的响应中。在调用索引路由函数之前调用中间件。如果抛出异常,将调用错误处理程序函数,但传递给该函数的$response对象似乎是一个新的响应对象,而不是在我的中间件中自定义的对象。换句话说,在我的回复中,我没有自定义标题 这种行为正确吗Php Slim Framework 3-响应对象,php,slim-3,Php,Slim 3,在我的Slim 3应用程序中,我定义了一个中间件,它将自定义头添加到我的响应中。在调用索引路由函数之前调用中间件。如果抛出异常,将调用错误处理程序函数,但传递给该函数的$response对象似乎是一个新的响应对象,而不是在我的中间件中自定义的对象。换句话说,在我的回复中,我没有自定义标题 这种行为正确吗 # Middleware $app->add(function ($request, $response, $next) { $response = $response->wit
# Middleware
$app->add(function ($request, $response, $next) {
$response = $response->withHeader('MyCustomHeader', 'MyCustomValue');
return $next($request, $response);
});
# Error handling
$container['errorHandler'] = function ($container) {
return function ($request, $response, $exception) use ($container) {
return $response->write('ERROR');
};
};
# Index
$app->get('/index', function(Request $request, Response $response) {
throw new exception();
return $response->write('OK');
});
是的,这是正确的,因为:
请求
和响应
对象是不可变的,因此需要通过所有函数传递它们。当抛出异常时,此链将断开,新创建的响应对象(在withHeader
-method上)无法传递给errorHandler
您可以通过抛出一个\Slim\Exception\SlimException
来修复该问题,该异常接受2个参数。请求和响应。使用此Slim,将使用错误处理程序内异常中给出的请求和响应
$app->get('/index', function(Request $request, Response $response) {
throw new \Slim\Exception\SlimException($request, $response);
return $response->write('OK');
});