上下文:基于Apigility的Zend Framework 2驱动的应用程序。在第一个版本(V1
)中,我使用ZfcBase
DbMapper
作为模型图层。现在,我正在使用Doctrine 2作为ORM实现V2
。
Apigility可以在版本之间轻松切换,每个版本都可以使用自己的数据库适配器:
/config/autoload/global.php
/ /config/autoload/local.php
<?php
return array(
...
'db' => array(
'adapters' => array(
'DB\\myproject_v1' => array(
// settings (driver, hostname, database, driver_options)
// credentials (username, password)
...
),
'DB\\myproject_v2' => array(
// settings (driver, hostname, database, driver_options)
// credentials (username, password)
...
),
),
),
...
);
因此,要将另一个版本作为默认值使用其后的另一个数据库,只需要更改URL:
myproject.tld/my-endpoint <-- version set to default
myproject.tld/v1/my-endpoint <-- version 1
myproject.tld/v2/my-endpoint <-- version 2
我想将Doctrine 2添加到我的应用程序中,因此我将local.php
扩展为显示here:
<?php
return array(
...
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => array(
// settings (host, port, dbname)
// credentials (user, password)
...
),
),
),
),
...
);
它正在运行,但现在我不具备在版本之间切换的灵活性/使用不同版本的不同版本。我的适配器设置被学说连接配置覆盖或者被忽略。
如何将Doctrine与Apigility的版本灵活性结合起来?如何使用Doctrine在Apigility应用程序中配置数据库连接,并且能够在同一时间切换版本/使用多个版本?
答案 0 :(得分:1)
配置的以下部分:
[
'db'=>[
'adapters' => [
'DB\\myproject_v1' => [],
'DB\\myproject_v2' => [],
]
]
]
配置一个抽象工厂,该工厂使用db adapter实例注册服务名DB\\myproject_v1
和DB\\myproject_v2
。
以下配置的一部分实际上是将适配器分配给数据库连接资源:
'db-connected' => array(
'YourDBConnectedResource' => array(
'adapter_name' => 'DB\\myproject_v1',
),
),
Doctrine提供了自己的抽象工厂和配置,因此要使Apigility与Doctrine一起使用作为数据库适配器,您只需稍微调整一下配置即可。首先,让我们为您的学说配置添加第二个连接,以帮助说明更改。
return [
'doctrine' => [
'connection' => [
'orm_default' => [ // you don't have to use orm_default, you can arbitrarily name this version1
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => [
// settings (host, port, dbname)
// credentials (user, password)
],
],
'version2' => [
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => [
// settings (host, port, dbname)
// credentials (user, password)
],
],
],
],
];
现在,您的数据库适配器名称为doctrine.connection.orm_default
和doctrine.connection.version2
。所以你用db-connected配置块中的那些替换它们。
'db-connected' => [
'My\\Endpoint\\V1\\Rest\\MyResource' => [
'adapter_name' => 'doctrine.connection.orm_default',
],
'My\\Endpoint\\V2\\Rest\\MyResource' => [
'adapter_name' => 'doctrine.connection.version2',
],
],