只需配置我的标准Symfony2版本,以便与odbc驱动程序一起使用。我需要它来连接Teradata。
我完全不需要任何ORM工具,我只会用它来返回Teradata存储过程或复杂查询的结果。
目前,它通过以下几个简单的步骤在过程PHP代码中工作:
- $conn = odbc_connect(HOST, USER, PASSWORD)
- $stmt = odbc_prepare($conn, $query)
- $params = array(1, 2, 3)
- odbc_execute($stmt, $params)
- next just fetch results using odbc_fetch_array($stmt)现在我正在思考如何根据Sf2最佳实践在Symfony2 MVC堆栈中实现这一点。也许是一个单独的服务?
我只会提到,新开发人员的易用性是一个优先事项。
提前感谢您的帮助!
发布于 2013-03-09 23:41:30
根据你所描述的,我建议创建一个服务,而不是使用全局常量通过服务容器接收HOST,USER和PASSWORD,也就是说,你把这些信息存储在你的parameters.yml中,在你的包的service.yml中创建一个带有这些参数的服务,最后你创建你的服务类,基本上就是包装你的odbc调用。
通过这种方式,您可以将敏感数据(用户、密码)保留在git存储库之外,假设您没有像Symfony文档中建议的那样跟踪parameters.yml,并且您可以轻松地从任何地方访问您的服务,如下所示:
$this->getContainer()->get('acme_demo.teradata_service')
parameters.yml:
parameters:
teradata_host: localhost
teradata_user: username
teradata_password: passwordAcme\DemoBundle\Resources\config\services.yml:
services:
acme_demo.teradata_service:
class: Acme\DemoBundle\Service\TeradataService
arguments:
- %teradata_host%
- %teradata_user%
- %teradata_password%Acme\DemoBundle\Service\TeradataService:
class TeradataService
{
public function __construct($host, $user, $password)
...
}您甚至可以更进一步,在您的service.yml中将teradata服务设为私有,然后只创建访问您的TeradataService的其他服务。这样,您可以确保deleopers不会直接干扰服务,而只是通过ObjectManagers。
Acme\DemoBundle\Resources\config\services.yml:
services:
acme_demo.teradata_service:
public: false
class: Acme\DemoBundle\Service\TeradataService
arguments:
- %teradata_host%
- %teradata_user%
- %teradata_password%
acme_demo.another_service:
class: Acme\DemoBundle\Service\ServiceAccessingTeradata
arguments:
- @acme_demo.teradata_service这样,您的服务就不会直接绑定到teradata连接,这使得用其他东西替换Acme\DemoBundle\Service\TeradataService变得更容易。
https://stackoverflow.com/questions/15311015
复制相似问题