如何在带有 Doctrine 的 Apigility 应用程序中同时使用多个版本?

2023-12-30

首先是上下文:敏捷性 https://apigility.org/驱动应用程序基于Zend 框架 2 http://framework.zend.com/。在第一个版本中(V1)我正在使用ZfcBase https://github.com/ZF-Commons/ZfcBase DbMapper https://github.com/ZF-Commons/ZfcBase/blob/master/src/ZfcBase/Mapper/AbstractDbMapper.php对于模型层。现在我正在实施V2 with 学说2 http://www.doctrine-project.org/ as 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

我想将原则 2 添加到我的申请中,所以我扩展了我的local.php like here https://github.com/doctrine/DoctrineORMModule/blob/master/README.md#connection-settings shown:

<?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 应用程序中配置数据库连接并保持能够在版本之间切换/同时使用多个版本?


您的配置的以下部分:

[
    'db'=>[
        'adapters' => [
            'DB\\myproject_v1' => [],
            'DB\\myproject_v2' => [],
        ]
    ]
]

配置注册服务名称的抽象工厂DB\\myproject_v1 and 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 and doctrine.connection.version2。因此,您可以替换数据库连接的配置块中的那些。

'db-connected' => [
    'My\\Endpoint\\V1\\Rest\\MyResource' => [
        'adapter_name'     => 'doctrine.connection.orm_default',
    ],
    'My\\Endpoint\\V2\\Rest\\MyResource' => [
        'adapter_name'     => 'doctrine.connection.version2',
    ],
],
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在带有 Doctrine 的 Apigility 应用程序中同时使用多个版本? 的相关文章

随机推荐