2015-01-29 9 views
4

컨텍스트 : Apigility 기반 응용 프로그램은 Zend Framework 2을 기반으로합니다. 첫 번째 버전 (V1)에서는 모델 레이어에 ZfcBaseDbMapper을 사용했습니다. 이제 ORM으로 V2Doctrine 2으로 구현하고 있습니다.Doctrine과 함께 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) 
       ... 
      ), 
     ), 
    ), 
    ... 
); 

가 다른 데이터베이스와 기본적으로 다른 버전을 사용 :

Apigility는 자신의 DB 어댑터를 사용할 수있는 버전의 모든 버전 사이에서 쉽게 전환을 제공 그 뒤에는 URL 만 변경하면됩니다.

myproject.tld/my-endpoint <-- version set to default 
myproject.tld/v1/my-endpoint <-- version 1 
myproject.tld/v2/my-endpoint <-- version 2 

나는 내 응용 프로그램에 교리 (2)를 추가 할, 그래서 here 같은 local.php 표시된 내 확장 :

<?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 연결을 구성하고 여러 버전을 동시에 사용할 수있는 상태를 유지하는 방법은 무엇입니까?

답변

1

사용자 설정의 다음 섹션

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

는 DB 어댑터 인스턴스의 서비스 이름을 DB\\myproject_v1DB\\myproject_v2를 등록 추상적 공장을 구성합니다.

아래에서 구성의 일부가 실제로 DB 연결 자원 어댑터를 할당한다

: 그래서 당신의 데이터베이스 어댑터로 교리와 Apigility 작업을 만들기 위해,

'db-connected' => array(
    'YourDBConnectedResource' => array(
     'adapter_name'  => 'DB\\myproject_v1', 
    ), 
), 

교리는 추상적 인 공장과 구성 자체를 제공합니다 , 구성을 조금만 조정하면됩니다. 먼저 변경을 설명하는 데 도움이되도록 doctrine config에 두 번째 연결을 추가하십시오.

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) 
       ], 
      ],    
     ], 
    ], 
]; 

는 지금, 당신의 DB 어댑터 이름은 doctrine.connection.orm_defaultdoctrine.connection.version2 있습니다. 따라서 DB 연결 구성 블록의 구성 요소로 대체하십시오.

'db-connected' => [ 
    'My\\Endpoint\\V1\\Rest\\MyResource' => [ 
     'adapter_name'  => 'doctrine.connection.orm_default', 
    ], 
    'My\\Endpoint\\V2\\Rest\\MyResource' => [ 
     'adapter_name'  => 'doctrine.connection.version2', 
    ], 
],