Symfony2 выдает ParameterNotFoundException для драйвера базы данных

В последнее время я создал дополнительную базу данных со своим собственным пользователем. Поэтому я создал дополнительный драйвер базы данных в parameters.yml, Насколько я знаю, это стандартный подход для подобных ситуаций. Пока это работает. В одном из сервисов, которые я создал, я могу использовать этот драйвер базы данных. При запуске кода на сайте проблем вообще нет.

Но, конечно, есть проблема, иначе я не буду просить твоих парней о помощи.

Я пытаюсь установить плагин, выполнив следующую команду:

$ ./composer.phar require pugx/autocompleter-bundle

Это дает следующую ошибку:

[Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]
You have requested a non-existent parameter "database_driver_geo". Did you mean this: "database_driver"?

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-update-cmd event terminated with an exception

Installation failed, reverting ./composer.json to its original content.

[RuntimeException]
An error occurred when executing the "'cache:clear --no-warmup'" command.

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

Я использую Symfony 2.5

[РЕДАКТИРОВАТЬ: Добавлен файл parameters.yml]

мой parameters.yml выглядит так:

# This file is auto-generated during the composer install
parameters:
# Default database
database_driver: pdo_mysql
database_host: ***
database_port: ***
database_name: ***
database_user: ***
database_password: ***

# Geo database
database_driver_geo: pdo_mysql
database_host_geo: ***
database_port_geo: ***
database_name_geo: ***
database_user_geo: ***
database_password_geo: ***

mailer_transport: ***
mailer_host: ***
mailer_user: ***
mailer_password: ***
locale: ***
secret: ***

[РЕДАКТИРОВАТЬ: Добавлен файл config.yml]

Раздел доктрины в config.yml файл:

# Doctrine Configuration
doctrine:
dbal:
default_connection: default
connections:
default:
driver:         %database_driver%
host:           %database_host%
port:           %database_port%
dbname:         %database_name%
user:           %database_user%
password:       %database_password%
charset:        UTF8
mapping_types:
enum:       string
bit:        integer
# if using pdo_sqlite as your database driver, add the path in parameters.yml
# e.g. database_path: %kernel.root_dir%/data/data.db3
# path:     %database_path%

geo:
driver:         %database_driver_geo%
host:           %database_host_geo%
port:           %database_port_geo%
dbname:         %database_name_geo%
user:           %database_user_geo%
password:       %database_password_geo%
charset:        UTF8
mapping_types:
enum:       string
bit:        integer
# if using pdo_sqlite as your database driver, add the path in parameters.yml
# e.g. database_path: %kernel.root_dir%/data/data.db3
# path:     %database_path%

orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
***CoreBundle: ~
geo:
connection: geo
mappings:
***GeoBundle: ~
auto_generate_proxy_classes: %kernel.debug%

Я надеюсь, что есть кто-то, кто может помочь мне решить эту проблему.

С уважением,

Малькольм

3

Решение

Как уже упоминалось в комментариях, parameters.yml файл автоматически перестраивается после композитора update или же install команда. Вы можете видеть это в своем composer.json файл в scripts раздел:

"scripts": {
"post-install-cmd": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
// other commands...
],
"post-update-cmd": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
// other commands...
]
},

Конечно, вы можете отключить эту функцию, если она вам не нравится. Но это может быть полезно при правильном использовании.

Поэтому, когда вы устанавливаете какой-либо пакет через композитор, вы теряете параметры, которые вы помещаете непосредственно в parameters.yml,

Что вы должны сделать, это использовать parameters.yml.dist файл, который используется для сборки parameters.yml, Он должен предоставлять значения параметров приложения (если они одинаковы для каждого экземпляра приложения) или значения по умолчанию, если параметры различны для каждой среды (prod / dev).

В вашем случае это второй вариант использования (значения по умолчанию), поскольку учетные данные БД будут меняться для каждого сервера. На самом деле это точно так же, как конфигурация соединения с БД по умолчанию. parameters.yml.dist содержит некоторые значения по умолчанию для этих параметров.

2

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

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

По вопросам рекламы [email protected]