Symfony2 在数据库驱动程序上给出了 ParameterNotFoundException
Symfony2 gives a ParameterNotFoundException on a database driver
最近我用它自己的用户创建了一个额外的数据库。因此,我在 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.
其他一些帖子说缓存的错误与file/dir权限有关。不过这好像不是问题,因为去掉geo driver的配置后,就不会出现这种错误了。
我是 运行 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%
希望有人能帮我解决这个问题。
亲切的问候,
马尔科姆
如评论中所述,parameters.yml
文件在 composer update
或 install
命令后自动重建。您可以在 composer.json
文件的 scripts
部分看到:
"scripts": {
"post-install-cmd": [
"Incenteev\ParameterHandler\ScriptHandler::buildParameters",
// other commands...
],
"post-update-cmd": [
"Incenteev\ParameterHandler\ScriptHandler::buildParameters",
// other commands...
]
},
如果您不喜欢,当然可以关闭此功能。但是使用得当可能会有用。
因此,当您通过 composer 安装某些软件包时,您将丢失直接放入 parameters.yml
的参数。
你应该做的是利用 parameters.yml.dist
文件来构建 parameters.yml
。它应该提供应用程序参数值(如果每个应用程序实例都相同)或默认值(如果每个环境的参数不同)(prod/dev)。
在您的情况下,这是第二个用例(默认值),因为数据库凭据将针对每台服务器进行更改。它实际上与默认数据库连接的配置完全相同。 parameters.yml.dist
包含这些参数的一些默认值。
最近我用它自己的用户创建了一个额外的数据库。因此,我在 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.
其他一些帖子说缓存的错误与file/dir权限有关。不过这好像不是问题,因为去掉geo driver的配置后,就不会出现这种错误了。
我是 运行 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%
希望有人能帮我解决这个问题。
亲切的问候,
马尔科姆
如评论中所述,parameters.yml
文件在 composer update
或 install
命令后自动重建。您可以在 composer.json
文件的 scripts
部分看到:
"scripts": {
"post-install-cmd": [
"Incenteev\ParameterHandler\ScriptHandler::buildParameters",
// other commands...
],
"post-update-cmd": [
"Incenteev\ParameterHandler\ScriptHandler::buildParameters",
// other commands...
]
},
如果您不喜欢,当然可以关闭此功能。但是使用得当可能会有用。
因此,当您通过 composer 安装某些软件包时,您将丢失直接放入 parameters.yml
的参数。
你应该做的是利用 parameters.yml.dist
文件来构建 parameters.yml
。它应该提供应用程序参数值(如果每个应用程序实例都相同)或默认值(如果每个环境的参数不同)(prod/dev)。
在您的情况下,这是第二个用例(默认值),因为数据库凭据将针对每台服务器进行更改。它实际上与默认数据库连接的配置完全相同。 parameters.yml.dist
包含这些参数的一些默认值。