В настоящее время я пишу REST API с помощью Slim Framework 3 и реализую Middleware для базовой проверки подлинности.
Моя маршрутизация выглядит следующим образом:
$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;
}
}
И я получаю следующее сообщение об ошибке:
Argument 1 passed to Slim\Route::__invoke() must implement interface Psr\Http\Message\ServerRequestInterface, instance of Slim\Http\Response given
по следующей строке:
$response = $next($response, $request);
Что происходит? есть идеи? Я ел себя над этим в течение 2-х часов :(
Благодаря кучу!
Похоже, вы смешиваете тонкие версии. Подпись метода для маршрута в v ersion 3 является '$ app-> get ('/ path', function (Request $ request, Response $ response) {...});' в группе вы просто используете '$ this' и не нужно использовать' (приложение) '. Также в вашей настройке slim вы можете добавить 'pdo' var в контейнер, а затем получить доступ к нему, как:' $ this-> pdo-> methodName(); ' – nerdlyist
Спасибо @nerdlyist, но когда я добавляю pdo в контейнер PHPStorm просто останавливает автозаполнение для методов pdo. – EpicSyntax
Ум ... что кажется странным для них, может быть, получить некоторую поддержку, но я бы не предложил использовать вашу архитектуру системы. Это добавляет много преимуществ, чтобы иметь это в контейнере на маршруте, например, если вы хотите перейти к контроллерам над раздутым индексным файлом. – nerdlyist