bravesheep/database-url-bundle

此包已被弃用且不再维护。未建议替代包。

从单个基于URL的参数确定Symfony2数据库设置

v0.2.0 2019-07-25 13:23 UTC

This package is auto-updated.

Last update: 2023-03-25 21:34:36 UTC


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_driverdatabase_hostdatabase_portdatabase_namedatabase_userdatabase_password

一般来说,此Bundle接受任何数据库URL并创建以下参数,前缀为指定的前缀:driverhostportnameuserpasswordpathmemory。变量pathmemory用于表示SQLite路径和一个布尔值,表示是否使用内存SQLite数据库。

接受的URL

URL通常格式为scheme://user:password@host:port/database。以下方案被理解

  • postgrespostgresqlpgsqlpdo_pgsql用于pdo_pgsql(PostgreSQL)驱动程序
  • mysqlpdo_mysql用于pdo_mysql(MySQL)驱动程序
  • sqlitepdo_sqlite用于pdo_sqlite(SQLite)驱动程序
  • mssqlpdo_mssql用于pdo_mssql(MSSQL)驱动程序

如果不需要,用户名和密码可以省略,以及端口,如果它是默认端口。对于SQLite,应使用以下格式

  • sqlite:///path/to/sqlite/db表示SQLite数据库的绝对路径。
  • sqlite:///%kernel.root_dir%/to/db.sql?relative表示使用kernel.root_dir作为基的相对路径
  • sqlite://:memory: 用于内存数据库