我有下面的中间件,我试图为需要进行身份验证的路由调用它。当__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;
}
}
答案 0 :(得分:0)
该问题是由使用Slim2的路由中间件声明引起的。
你可以$app->get('route','Middleware','Callback')
但是在SF3中你应该声明它像$app->get('route','Callback')->add('Middleware')
这导致应用程序认为中间件实际上是回调。