我一直在使用 slim/twig-view,记录在这里:https ://notes.enovision.net/slim/composer-package-documentation/slim_twig-view 。处理路由、渲染视图的推荐方法是:
$app->get('/hello/{name}', function ($request, $response, $args) {
$view = Twig::fromRequest($request);
return $view->render($response, 'profile.html', [
'name' => $args['name']
]);
})
问题是,如果您尝试添加任何基于路由的中间件以在之后运行,它会失败
$app->get('/hello/{name}', function ($request, $response, $args) {
$view = Twig::fromRequest($request);
return $view->render($response, 'profile.html', [
'name' => $args['name']
]);
})->add(function(Request $request, RequestHandler $handler){
$response = $handler->handle($request);
return $response;
});
出现这样的错误:
Type: TypeError
Code: 0
Message: Return value of Slim\Handlers\Strategies\RequestResponse::__invoke() must implement interface Psr\Http\Message\ResponseInterface, int returned
File: /var/www/html/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php
Line: 43
我看到这是因为我没有从路由处理程序返回响应,所以我重写了路由处理程序以返回 $response:
$view = Twig::fromRequest($request);
$view->render($response, 'profile.html', [
'name' => $args['name']
]);
return $response;
还是同样的错误。
我可以解决这个问题,但这是一个新建项目,如果能够访问路由中间件会很好。有任何想法吗?