我有下面的中间件,我正试图为需要身份验证的路由调用它。当__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')
这会导致应用程序认为中间件实际上是回调。