精简中间件——不接收下一个可调用对象


Slim middleware - not receiving next callable

我有下面的中间件,我正试图为需要身份验证的路由调用它。当__invoke触发时,第三个参数是一个空数组,而不是堆栈中的下一个可调用中间件。我的其他中间件工作得很好,与此唯一的区别是构造函数。这是问题所在吗?

我还假设以前的中间件堆栈工作良好,因为当我从堆栈中删除这个时,应用程序按预期工作。

错误是Fatal error: Function name must be a string

所讨论的行是$response = $next($request,$response);,其中$next是一个空数组。

精简版3

namespace RealEstate'CommunicationService'Middleware;

use GuzzleHttp'Client;
use Slim'Http'Request;
use Slim'Http'Response;
class SecuredRouteMiddleware
{
    const SCOPE_NAME = 'messages';
    public function __construct(Client $guzzle){
        $this->guzzle = $guzzle;
    }
    public function __invoke(Request $request,Response $response,$next){
        $response = $next($request,$response);
        $uacResponse = $this->guzzle->request('GET','http://rees-uac.dev/resource/'.self::SCOPE_NAME.'/validate',[
            'headers' => [
                'Authentication' => $request->getHeader('Authentication')
            ]
        ]);
        return $response;
    }
}

使用了来自Slim2的路由中间件声明导致的问题

你可以做$app->get('route','Middleware','Callback')

但是在SF3中,你应该像$app->get('route','Callback')->add('Middleware')

那样声明它

这会导致应用程序认为中间件实际上是回调。