bravesheep / database-url-bundle
从单个基于URL的参数确定Symfony2数据库设置
Requires
- symfony/config: ~3.4|^4.0
- symfony/dependency-injection: ~3.4|^4.0
- symfony/http-kernel: ~3.4|^4.0
Requires (Dev)
- phpspec/phpspec: ^5.1
README
一个用于解析指定数据库的URL内容的Symfony2 Bundle。
安装和配置
使用Composer,通过require命令将Bundle添加到依赖中:composer require bravesheep/database-url-bundle:dev-master
。
将Bundle添加到AppKernel
在app/AppKernel.php
中添加Bundle。注意:为了使此Bundle定义的参数被Doctrine拾取,您需要在包含Doctrine\Bundle\DoctrineBundle\DoctrineBundle
包之前包含此Bundle。
public function registerBundles() { return array( // ... new Bravesheep\DatabaseUrlBundle\BravesheepDatabaseUrlBundle(), // ... ); }
配置应重写为参数的URL
为了使此Bundle正常工作,您需要指定哪些URL需要重写为基本参数。此Bundle可以通过在bravesheep_database_url.urls
下配置正确的属性来处理任意数量的URL。请参考以下示例配置
bravesheep_database_url: urls: default: url: %database_url% prefix: database_
在这种情况下,我们使用database_url
参数的值,并从中创建以database_
为前缀的参数。
用法
请查看由Symfony2标准版分发的此parameters.yml.dist
parameters: database_driver: pdo_mysql database_host: 127.0.0.1 database_port: ~ database_name: symfony database_user: root database_password: ~ mailer_transport: smtp mailer_host: 127.0.0.1 mailer_user: ~ mailer_password: ~ locale: en secret: ThisTokenIsNotSoSecretChangeIt debug_toolbar: true debug_redirects: false use_assetic_controller: true
如您所见,仅指定数据库连接就需要6个参数。如果我们可以用URL来指定数据库,这可能会减少到仅此一个
parameters: database_url: mysql://root@127.0.0.1/symfony mailer_transport: smtp mailer_host: 127.0.0.1 mailer_user: ~ mailer_password: ~ locale: en secret: ThisTokenIsNotSoSecretChangeIt debug_toolbar: true debug_redirects: false use_assetic_controller: true
这正是BravesheepDatabaseUrlBundle要做的。上一节中的示例配置读取此database_url
参数,并创建单个的database_driver
、database_host
、database_port
、database_name
、database_user
和database_password
。
一般来说,此Bundle接受任何数据库URL并创建以下参数,前缀为指定的前缀:driver
、host
、port
、name
、user
、password
、path
和memory
。变量path
和memory
用于表示SQLite路径和一个布尔值,表示是否使用内存SQLite数据库。
接受的URL
URL通常格式为scheme://user:password@host:port/database
。以下方案被理解
postgres
、postgresql
、pgsql
和pdo_pgsql
用于pdo_pgsql
(PostgreSQL)驱动程序mysql
和pdo_mysql
用于pdo_mysql
(MySQL)驱动程序sqlite
和pdo_sqlite
用于pdo_sqlite
(SQLite)驱动程序mssql
和pdo_mssql
用于pdo_mssql
(MSSQL)驱动程序
如果不需要,用户名和密码可以省略,以及端口,如果它是默认端口。对于SQLite,应使用以下格式
sqlite:///path/to/sqlite/db
表示SQLite数据库的绝对路径。sqlite:///%kernel.root_dir%/to/db.sql?relative
表示使用kernel.root_dir作为基的相对路径sqlite://:memory:
用于内存数据库