Как использовать «paramconverter» с API-платформой? - PullRequest
1 голос
/ 13 мая 2019

Как реализовать или использовать paramconverter с платформой Symfony API?

Я хочу использовать идентификатор объекта на маршруте и немедленно создать объект, готовый для использования в контроллере.

Я не использую аннотации для этого проекта. Конфигурации маршрута находятся в файле YAML.

resources:
    App\Meetings\Domain\Entity\Meeting:
        collectionOperations:
            invitation_response:
                method: 'POST'
                path: 'users/{id}'
                controller: 'App\Controller\User\IndexController'
                defaults:
                    _api_receive: false

1 Ответ

2 голосов
/ 13 мая 2019

Почему бы не использовать декоратор ?

Например, если ваш контроллер выглядит примерно так:

class IndexController {

   public function __invoke(CustomClass $object) {
      // do your thing
      // return a Response
   }

Вы можете создать декоратор CustomClassConverterController

class CustomClassConverter {

     protected $innerController;
     protected $em;

     public function (IndexController $controller, EntityManagerInterface $em) {
        $this->innerController = $controller;
        $this->em = $em;
     }

     public function __invoke($id) {

        $object = $this->em->getRepository(CustomClass::class)->findOne((int) $id);
        if (! $object instanceof CustomClass) {
           throw new NotFoundHttpException('Custom class ' . $id . ' not found');
        }

        return $this->innerController($object); 

     }
}

Вам необходимо добавить эту конфигурацию, чтобы активировать украшение:

services:
    App\Controller\IndexController: ~

    App\Decorator\CustomClassConverterController:
        decorates: App\Controller\IndexController
...