在Symfony 3.3中自动连接自定义DBAL连接

时间:2018-01-10 16:14:00

标签: symfony

你好symfony的朋友。我正在构建一个需要2个数据库连接的项目。并且它工作得很好,但如果我想通过依赖注入来获取/使用第二个(称为客户)连接而不是$ this-> container-> get('doctrine.dbal.customer_connection');它采用默认连接。我正在尝试使用依赖注入,因为这是使用symfony的新方法,我理解在Symfony的新闻版本中将弃用另一种方式,所以我将我的代码更新为新的代码方式。

我的配置很好用。

config.yml
# Doctrine Configuration
doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver: pdo_mysql
                host: '%database_host%'
                port: '%database_port%'
                dbname: '%database_name%'
                user: '%database_user%'
                password: '%database_password%'
                charset: UTF8
            customer:
                driver: oci8
                host: '%database_host2%'
                port: '%database_port2%'
                dbname: '%database_name2%'
                user: '%database_user2%'
                password: '%database_password2%'
                charset: UTF8

所以,如果我在控制器中使用下一个代码,它会返回它想要返回的内容,即客户连接。

$connection = $this->container->get('doctrine.dbal.customer_connection');

目前运作良好,我可以获得客户连接。 所以现在,我认为是为这种情况创建一个名为“QueriesCustomer”的服务,更新services.yml并最终更新我想要与服务“QueriesCustomer”一起使用的控制器中的参数作为依赖注入准备使用控制器。

<?php
#AppBundle/Service/QueriesOracle.php

namespace AppBundle\Service;

use Doctrine\DBAL\Connection;

class QueriesOracle
{
    /**
     * @var Connection
    */
    private $oracleDB;


    /**
     * QueriesOracle constructor.
     * @param Connection $oracleDB
    */
    public function __construct(Connection $oracleDB)
    {
        $this->oracleDB = $oracleDB;
    }
}

services.yml
services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false
    AppBundle\Services\QueriesOracle:
        class: AppBundle\Service\QueriesOracle
        arguments:
          - '@doctrine.dbal.customer_connection'

最后是控制器

<?php

namespace AppBundle\Controller;

use AppBundle\Service\QueriesOracle;
...

class AduanasController extends Controller
{

    /**
     * @Route("/{_locale}/xxx")
     * @param Request $request
     * @param QueriesOracle $queriesOracle
     */
    public function nameOfFunctionAction(Request $request, QueriesOracle $queriesOracle)
    {
        dump($queriesOracle);die;
    }
}

谁能告诉我如何解决这个“问题”?我想通过依赖注入两个连接使用没有问题。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

检测到问题....在service.yml AppBundle \ Service&#34; s(需要删除...)&#34; \ QueriesOracle:class:AppBundle \ Service \ QueriesOracle