Próbuję użyć middleware w moim {x1}}, ale mam błąd:

Fatal Error: Nieprzemoc ArgumentCounterRor: Zbyt mało argumentów do funkcji API Middleware Auth :: __ Invoke (), 2 minęły

Próbuję:

plik indeksu

<?php

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

use Api\Middleware\Auth;

require __DIR__ . '../../../vendor/autoload.php';

$app = AppFactory::create();

$app->add(new Auth);

$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Start Project");
    return $response;
});

$app->run();

plik pośredniczym

<?php

namespace Api\Middleware;

class Auth {
  public function __invoke($request, $response, $next) {
    echo "Middleware";
    return $next($request, $response);
  }
}

Czytam i kopiuję Docs ale nie można naprawić tego błędu.

0
Victor Hugo 8 styczeń 2020, 16:05

1 odpowiedź

Najlepsza odpowiedź

W oparciu o dokumentację, którą połączyłeś oprogramowanie pośrednie w SLIM, jest funkcją, która bierze dwa argumenty lub obiekt z metodą magiczną __invoke, która bierze dwa argumenty. Minąte argumenty są Psr\Http\Message\ServerRequestInterface i Psr\Http\Server\RequestHandlerInterface.

Twoje wdrożenie oprogramowania pośredniego spodziewa się 3 argumentów.

To powinno wyglądać tak:

class Auth {
    public function __invoke($request, $handler) {
        echo "Middleware";
        return $handler->handle($request);
    }
}
1
Michal Hynčica 8 styczeń 2020, 13:24