首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Symfony 2 odbc组件

Symfony 2 odbc组件
EN

Stack Overflow用户
提问于 2013-03-09 21:05:25
回答 1查看 1.8K关注 0票数 0

只需配置我的标准Symfony2版本,以便与odbc驱动程序一起使用。我需要它来连接Teradata。

我完全不需要任何ORM工具,我只会用它来返回Teradata存储过程或复杂查询的结果。

目前,它通过以下几个简单的步骤在过程PHP代码中工作:

代码语言:javascript
运行
复制
 - $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堆栈中实现这一点。也许是一个单独的服务?

我只会提到,新开发人员的易用性是一个优先事项。

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-09 23:41:30

根据你所描述的,我建议创建一个服务,而不是使用全局常量通过服务容器接收HOSTUSERPASSWORD,也就是说,你把这些信息存储在你的parameters.yml中,在你的包的service.yml中创建一个带有这些参数的服务,最后你创建你的服务类,基本上就是包装你的odbc调用。

通过这种方式,您可以将敏感数据(用户、密码)保留在git存储库之外,假设您没有像Symfony文档中建议的那样跟踪parameters.yml,并且您可以轻松地从任何地方访问您的服务,如下所示:

$this->getContainer()->get('acme_demo.teradata_service')

parameters.yml:

代码语言:javascript
运行
复制
parameters:
    teradata_host:     localhost
    teradata_user:     username
    teradata_password: password

Acme\DemoBundle\Resources\config\services.yml:

代码语言:javascript
运行
复制
services:
    acme_demo.teradata_service:
        class: Acme\DemoBundle\Service\TeradataService
        arguments:
            - %teradata_host%
            - %teradata_user%
            - %teradata_password%

Acme\DemoBundle\Service\TeradataService:

代码语言:javascript
运行
复制
class TeradataService
{
    public function __construct($host, $user, $password) 
    ...
}

您甚至可以更进一步,在您的service.yml中将teradata服务设为私有,然后只创建访问您的TeradataService的其他服务。这样,您可以确保deleopers不会直接干扰服务,而只是通过ObjectManagers。

Acme\DemoBundle\Resources\config\services.yml:

代码语言:javascript
运行
复制
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变得更容易。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15311015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档