2016-10-19 4 views
0

У меня есть промежуточное программное обеспечение, и я пытаюсь вызвать его для маршрутов, которые необходимо пройти аутентификацию. Когда __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; 
    } 
} 
+0

Эта строка $ response = $ next ($ request, $ response) настолько странная. Зачем вам это нужно? –

+0

Процитировать документацию 'Он может делать все, что подходит этим объектам. Единственное жесткое требование заключается в том, что промежуточное ПО ДОЛЖНО возвращать экземпляр \ Psr \ Http \ Message \ ResponseInterface. Каждое промежуточное ПО ДОЛЖНО вызывать следующее промежуточное программное обеспечение и передавать его объектам «Запрос» и «Ответ» в качестве аргументов. «Вы заставили меня думать о том, что происходит, когда я этого не называю. BRB – Slytherin

ответ

0

Проблема была вызвана использованием декларации маршрута промежуточного от Slim2

Там вы могли бы сделать $app->get('route','Middleware','Callback')

Но в SF3 вы должны объявить его как $app->get('route','Callback')->add('Middleware')

Это привело к тому, что приложение считало, что промежуточное ПО является обратным вызовом.