Получение менеджера сущностей в классе CompilerPass - PullRequest
0 голосов
/ 09 марта 2019

Я создал класс CompilerPass, чтобы установить некоторые данные из базы данных в качестве параметров:

class ParametersCompilerPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        $em = $container->get('doctrine.orm.default_entity_manager');
        $params = $em->getRepository(Setting::class)->findAll();
    }
}

, но я получаю эту ошибку:

An exception occurred in driver: SQLSTATE[HY000] [1102] Incorrect database name 'nv_097f203e25c61d94_resolve_database_url_c9a61b2f5dc3b858f85dcd10be22549a'

Когда я получаю менеджер сущностей, например, вконтроллер через doctrine.orm.default_entity_manager сервис все отлично работает.

doctrine.yaml:

parameters:
    env(DATABASE_URL): ''

doctrine:
    dbal:
        driver: 'pdo_mysql'
        server_version: '5.4'
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci

        url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

1 Ответ

1 голос
/ 11 марта 2019

Вы не можете получить доступ к сервису во время сборки в CompilerPass, контейнер еще не создан. CompilerPass предназначен для записи вещей в сгенерированный файл .php, который будет загружен позже.

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

...