只需将我的标准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堆栈中如何以及在何处实现它...也许是一个单独的服务?
只会提到新开发人员的易用性是首要任务。
提前感谢您的帮助!
答案 0 :(得分:2)
根据您的描述,我建议创建一个服务,而不是使用全局常量通过服务容器接收HOST
,USER
和PASSWORD
,即您将该信息存储在参数中.yml,在你的bundle的service.yml中用这些参数创建一个服务,最后你创建你的Service-class,它基本上只包含你的odbc调用。
这样您就可以将敏感数据(用户,密码)保留在git-repo之外,假设您没有按照Symfony文档中的建议跟踪parameters.yml,您可以从有权访问的任何地方轻松访问您的服务像这样的服务容器:
$this->getContainer()->get('acme_demo.teradata_service')
parameters.yml:
parameters:
teradata_host: localhost
teradata_user: username
teradata_password: password
的Acme \ DemoBundle \资源\配置\ services.yml:
services:
acme_demo.teradata_service:
class: Acme\DemoBundle\Service\TeradataService
arguments:
- %teradata_host%
- %teradata_user%
- %teradata_password%
的Acme \ DemoBundle \服务\ TeradataService:
class TeradataService
{
public function __construct($host, $user, $password)
...
}
您甚至可以更进一步,在您的service.yml中将teradata服务设为私有,然后创建其他访问TeradataService的服务。通过这种方式,您可以确保删除程序不会直接干扰服务,但只能通过ObjectManagers。
的Acme \ DemoBundle \资源\配置\ 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。