如何在带有 Doctrine 的 Apigility 应用程序中同时使用多个版本?
How to use multiple versions at the same time in an Apigility app with Doctrine?
上下文优先:Apigility driven application based on Zend Framework 2. In the first version (V1
) I was using the ZfcBase
DbMapper
for the model layer. Now I'm implementing the V2
with Doctrine 2 作为 ORM。
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 连接配置覆盖或被忽略。
如何将 Doctrine 与 Apigility 的版本控制灵活性结合起来?如何使用 Doctrine 在 Apigility 应用程序中配置数据库连接并保持能够在版本之间切换/同时使用多个版本?
您配置的以下部分:
[
'db'=>[
'adapters' => [
'DB\myproject_v1' => [],
'DB\myproject_v2' => [],
]
]
]
配置一个抽象工厂,用于向数据库适配器实例注册服务名称 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',
],
],
上下文优先:Apigility driven application based on Zend Framework 2. In the first version (V1
) I was using the ZfcBase
DbMapper
for the model layer. Now I'm implementing the V2
with Doctrine 2 作为 ORM。
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 连接配置覆盖或被忽略。
如何将 Doctrine 与 Apigility 的版本控制灵活性结合起来?如何使用 Doctrine 在 Apigility 应用程序中配置数据库连接并保持能够在版本之间切换/同时使用多个版本?
您配置的以下部分:
[
'db'=>[
'adapters' => [
'DB\myproject_v1' => [],
'DB\myproject_v2' => [],
]
]
]
配置一个抽象工厂,用于向数据库适配器实例注册服务名称 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',
],
],