【问题标题】:How to use multiple versions at the same time in an Apigility app with Doctrine?如何在带有 Doctrine 的 Apigility 应用程序中同时使用多个版本?
【发布时间】:2015-01-29 15:54:03
【问题描述】:

上下文优先:Apigility 基于Zend Framework 2 驱动的应用程序。在第一个版本 (V1) 中,我使用 ZfcBase DbMapper 作为模型层。现在我正在实现 V2Doctrine 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 与 Apigility 的版本控制灵活性结合起来?如何使用 Doctrine 在 Apigility 应用程序中配置数据库连接并保持能够在版本之间切换/同时使用多个版本?

【问题讨论】:

    标签: doctrine-orm zend-framework2 version dbconnection laminas-api-tools


    【解决方案1】:

    您的配置的以下部分:

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

    配置一个抽象工厂,向数据库适配器实例注册服务名称DB\\myproject_v1DB\\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_defaultdoctrine.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',
        ],
    ],
    

    【讨论】:

      猜你喜欢
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多