Тип привязки подсказывает интерфейс к реализации

Я создаю приложение Lumen и пытаюсь создать его с очень твердым эталоном, с небольшими многоразовыми и заменяемыми пакетами.

Так что у меня есть интерфейс для абстрактного контроллера ресурсов, как

use Psr\Http\Message\ServerRequestInterface;

interface ResourceControllerContract
{
public function store(ServerRequestInterface $request);
}

В моей реализации контроллера пользовательских ресурсов

use GuzzleHttp\Psr7\ServerRequest;

final class UserController extends ResourceController
{
public function store(ServerRequest $request)
{
$request = $request->getParsedBody();
}
}

Поскольку Guzzle Request уже реализует Psr \ Http \ Message \ RequestInterface, я предположил, что это можно передать, но мое приложение продолжало выдавать исключение, говоря, что атрибут, переданный для store (), должен быть объявлен как description в ResourceControllerContract

В моем сервис-провайдере в методе регистрации я создал привязку так

    $this->app->bind(
'Psr\Http\Message\ServerRequestInterface',
'GuzzleHttp\Psr7\ServerRequest'
);

Но все равно выдает ту же ошибку, может кто-нибудь подсказать, что здесь не так? Я впервые создаю приложение таким образом, так что прости меня, если я пропустил простую оплошность

2

Решение

Итак, понял, что реализация UserController должна быть такой

use Psr\Http\Message\ServerRequestInterface;

final class UserController extends ResourceController
{
public function store(ServerRequest $request)
{
$request = $request->getParsedBody();
}
}

А затем просто оставьте привязку для привязки GuzzleHttp \ Psr7 \ ServerRequest к Psr \ Http \ Message \ ServerRequestInterface

Может кто-нибудь объяснить, почему, хотя GuzzleHttp \ Psr7 \ ServerRequest уже реализует Psr \ Http \ Message \ ServerRequestInterface, его необходимо связать с поставщиком услуг laravel. Или просто php не распознает его как реализацию, когда в функции есть подсказка типа?

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector