根据您的描述,我建议创建一个服务,而不是使用全局常量接收HOST
,USER
并PASSWORD
通过服务容器,即您将该信息存储在您的 parameters.yml 中,在您的 bundle 的 service.yml 中使用这些参数创建一个服务,最后您创建您的服务类,它基本上只是包装您的 odbc 调用。
通过这种方式,您可以将敏感数据(用户、密码)排除在您的 git-repo 之外,假设您没有按照 Symfony 文档中的建议跟踪 parameters.yml,并且您可以从可以访问服务的任何地方轻松访问您的服务像这样的容器:
$this->getContainer()->get('acme_demo.teradata_service')
参数.yml:
parameters:
teradata_host: localhost
teradata_user: username
teradata_password: password
Acme\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 变得更容易。