In Apigility
数据库连接服务允许[...]指定数据库适配器[...]
(请参阅文档中的 REST 服务教程)。
"数据库连接"服务提供Database Settings
,其中可以分配适配器。每个适配器都"知道"要使用哪些凭据以及要连接哪个数据库。
我创建了一个"代码连接"的 REST 服务,并希望版本 V1
和 V2
使用单独的数据库。如何实现这一点?
为了使用多个数据库适配器,只需要一个
- 在(
global.php
用于常规设置(如凭据的driver
和local.php
)中创建适当的配置块 - 可以手动或通过Apugility GUI完成(Dashboard -> Database Adapters
)
全球.php
return array(
'db' => array(
'adapters' => array(
'DB\myapi_v1' => array(
'driver' => 'Pdo',
'driver_options' => array(
1002 => 'SET NAMES 'UTF8'',
),
'pdodriver' => 'mysql',
),
'DB\myapi_v2' => array(
...
),
),
),
...
);
本地.php
return array(
'db' => array(
'adapters' => array(
'DB\myproject_v1' => array(
'username' => 'root',
'password' => 'pwd',
'dbname' => 'myproject_v1',
'host' => 'localhost',
),
'DB\myproject_v2' => array(
...
),
),
),
...
);
- 设置此适配器而不是默认
ZendDbAdapterAdapter
,例如使用ZfcBaseMapper
(这里是应用程序中的示例,其中适配器在出厂时为service
类设置;service
这里是controller
/resource
和DB mapper
之间的层):
[myproject]/module/Portfolio/src/Portfolio/V1/Rest/Image/ImageServiceFactory.php
namespace PortfolioV1RestImage;
use ZendServiceManagerFactoryInterface;
use ZendServiceManagerServiceLocatorInterface;
class ImageServiceFactory implements FactoryInterface {
public function createService(ServiceLocatorInterface $serviceManager) {
$mapper = new ImageMapper;
$mapper->setDbAdapter($serviceManager->get('DB\myproject_v1'));
$mapper->setEntityPrototype($serviceManager->get('PortfolioV1RestImageImageEntity'));
$mapper->getHydrator()->setUnderscoreSeparatedKeys(false);
$service = new ImageService();
$service->setMapper($mapper);
return $service;
}
}