1

我一直在使用 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;

还是同样的错误。

我可以解决这个问题,但这是一个新建项目,如果能够访问路由中间件会很好。有任何想法吗?

4

0 回答 0