Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Slim\\Route::_invoke()和中间件不接受正确的$request&$响应_Php_Slim_Middleware - Fatal编程技术网

Php Slim\\Route::_invoke()和中间件不接受正确的$request&$响应

Php Slim\\Route::_invoke()和中间件不接受正确的$request&$响应,php,slim,middleware,Php,Slim,Middleware,我目前正在使用Slim Framework 3编写REST API,并实现用于基本身份验证的中间件 我的路线是这样的: $app->group('/api', function () use ($app, $pdo) { $this->group('/v1', function () use ($app, $pdo) { // Guest Routes $this->group('', function() use ($app, $pd

我目前正在使用Slim Framework 3编写REST API,并实现用于基本身份验证的中间件

我的路线是这样的:

$app->group('/api', function () use ($app, $pdo) {
    $this->group('/v1', function () use ($app, $pdo) {

        // Guest Routes
        $this->group('', function() use ($app, $pdo) {
            require_once '../app/api/v1/authentication.php';
        });

        // Authenticated Routes
        $this->group('', function() use ($app, $pdo) {
            require_once '../app/api/v1/test.php';
        })->add(new \App\Middleware\AuthMiddleware($pdo));

    });
});
在AuthMiddleware类中,我以以下方式使用_invoke方法:

namespace App\Middleware;

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

class AuthMiddleware extends Middleware {

/**
 * @param Request $request
 * @param Response $response
 * @param $next
 * @return Response
 */
    public function __invoke(Request $request, Response $response, $next) {

        $response = $next($response, $request);

        return $response;
    }

}
我得到了以下错误:

传递给Slim\Route::\uu invoke()的参数1必须实现接口Psr\Http\Message\ServerRequestInterface,给定Slim\Http\Response的实例

在以下行:

$response = $next($response, $request);
发生了什么事?有什么想法吗?我已经为此吃了两个小时了:(


非常感谢!

太愚蠢了……我在电视上注意到了这一点

$response = $next($response, $request);
我颠倒了参数..应该是

$response = $next($request, $response);

呜呜……我的头好痛。

愚蠢地……我注意到我的头上有点痛

$response = $next($response, $request);
我颠倒了参数..应该是

$response = $next($request, $response);

呜呜……我的头好痛。

看起来你在混合苗条版本。版本3中路由的方法签名是
$app->get('/path',function(Request$Request,Response$Response){…};
在一个组中,你只需使用
$this
,而不需要
使用(app)
。在slim的设置中,您还可以将
pdo
var添加到容器中,然后像这样访问它:
$this->pdo->methodName()
谢谢@nerdlyist,但是当我将pdo添加到容器中时,PHPStorm只是停止了pdo方法的自动完成。嗯……他们这样做似乎很奇怪,也许会得到一些支持,但我不建议将您的系统架构基于此。例如,如果您愿意,将pdo添加到容器中会增加很多好处通过膨胀的索引文件移动到控制器。看起来您正在混合精简版本。版本3中路由的方法签名是
$app->get('/path',function(Request$Request,Response$Response){…};
在组中,您只需使用
$this
,而不需要
使用(app)
。在slim的设置中,您还可以将
pdo
var添加到容器中,然后像这样访问它:
$this->pdo->methodName()
谢谢@nerdlyist,但是当我将pdo添加到容器中时,PHPStorm只是停止了pdo方法的自动完成。嗯……他们这样做似乎很奇怪,也许会得到一些支持,但我不建议将您的系统架构基于此。例如,如果您愿意,将pdo添加到容器中会增加很多好处在一个膨胀的索引文件上移动到控制器。我感觉到你的痛苦!我感觉到你的痛苦!