超薄中间件 - 不接收下一个可调用的

时间:2016-10-19 10:48:45

标签: php slim middleware

我有下面的中间件,我试图为需要进行身份验证的路由调用它。当__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;
    }
}

1 个答案:

答案 0 :(得分:0)

该问题是由使用Slim2的路由中间件声明引起的。

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

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

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