У меня есть промежуточное программное обеспечение, и я пытаюсь вызвать его для маршрутов, которые необходимо пройти аутентификацию. Когда __invoke срабатывает, третий аргумент представляет собой пустой массив вместо следующего вызываемого промежуточного программного обеспечения из stack.My другие middlewares работают нормально, и единственное отличие от этого является конструктором. Это может быть проблема?Тонкое промежуточное ПО - не получает следующий вызываемый
Я также предполагаю, что предыдущий стек промежуточного программного обеспечения работает хорошо, потому что, когда я удаляю его из стека, приложение работает так, как ожидалось.
Ошибки я получаю 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;
}
}
Эта строка $ response = $ next ($ request, $ response) настолько странная. Зачем вам это нужно? –
Процитировать документацию 'Он может делать все, что подходит этим объектам. Единственное жесткое требование заключается в том, что промежуточное ПО ДОЛЖНО возвращать экземпляр \ Psr \ Http \ Message \ ResponseInterface. Каждое промежуточное ПО ДОЛЖНО вызывать следующее промежуточное программное обеспечение и передавать его объектам «Запрос» и «Ответ» в качестве аргументов. «Вы заставили меня думать о том, что происходит, когда я этого не называю. BRB – Slytherin