Symfony 4 — как передать контролеру entity динамично?

В Symfony 4, чтобы передать сущность (entity) динамически в контроллер, можно воспользоваться инъекцией зависимостей (dependency injection). Для этого понадобится настроить сервисы и контроллеры.

1. Сначала необходимо создать и настроить класс сущности.

namespace AppEntity;

class MyEntity
{
    private $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    public function getData()
    {
        return $this->data;
    }
}

2. Затем нужно создать сервис, который будет инстанцировать класс сущности.

namespace AppService;

use AppEntityMyEntity;

class MyEntityService
{
    public function createEntity($data)
    {
        return new MyEntity($data);
    }
}

3. Теперь можно настроить сервис в файле конфигурации сервисов services.yaml.

services:
    AppServiceMyEntityService:
        # ...

4. Для инъекции зависимости сервиса MyEntityService в контроллер, можно воспользоваться конструктором или методом.

namespace AppController;

use AppServiceMyEntityService;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;

class MyController
{
    private $entityService;

    public function __construct(MyEntityService $entityService)
    {
        $this->entityService = $entityService;
    }

    /**
     * @Route("/my-route")
     */
    public function myAction()
    {
        // Создание объекта сущности динамически
        $entity = $this->entityService->createEntity($data);

        // Другие действия с объектом сущности...

        return new Response('Done');
    }
}

Теперь, при обращении к маршруту /my-route, метод myAction контроллера MyController может создать объект сущности динамически, используя сервис MyEntityService.

При этом, важно убедиться, что конфигурационные файлы и пространства имен настроены правильно, чтобы Symfony смог найти и использовать классы, сервисы и контроллеры в соответствующих местах.