【问题标题】:Symfony Doctrine Dynamic ConfigurationSymfony 学说动态配置
【发布时间】:2017-01-05 12:17:55
【问题描述】:

我目前在我的 Symfony 3 项目中遇到教义连接问题。

这是我应该实现的数据库连接图:

1 - 请求包含服务器、登录名和应用程序数据库密码的外部数据库

2 - 解密密码

3 - 配置/学说连接

我不知道我应该使用config.yml 还是使用其他方法?

在这种情况下推荐的方法是什么?

【问题讨论】:

    标签: php symfony doctrine-orm doctrine


    【解决方案1】:

    我在我的一个项目中做过类似的事情,这是我的工作解决方案:

    首先,在 config.yml 中定义一个空连接

    dynamic_con:
        dbname:   ~
        user:     ~
        password: ~
        host:     ~
        charset:  UTF8
    

    现在,我写了一个PostLoginController,在成功登录后总是会调用它。

    在那里,我得到了我的连接数据并用它打电话给我的DynamicDatabaseService

    我的DynamicDatabaseService 具有以下功能,它将与提供的数据建立我的连接。

    public function getDynamicDatabase() 
    {
        // $this->doctrine was given to the service in the constructor beforehand
        $dynamicCon = $this->doctrine->getConnection('dynamic_con');
        $refCon = new \ReflectionObject($dynamicCon);
        $refParams = $refCon->getProperty('_params');
        $refParams->setAccessible('public');
        if($params == false){
            $defaultCon = $this->doctrine->getConnection('default');
            $params = $refParams->getValue($dynamicCon);
    
            // You need to inject your Params to the function or implement some further logic to receive your connection parameters to use them here.
            $params['dbname'] = $dbName;
            $params['user'] = $dbUser;
            $params['password'] = $dbPass;
            $params['host'] = $dbHost;
            }
    
        $refParams->setValue($dynamicCon,$params);
        $refParams->setAccessible('private');
    
        return $dynamicCon;
    }
    

    现在,您可以将$dynamicCon 用作普通 PDO 连接,所以

    $dynamicCon->prepare("SELECT * FROM USERS WHERE id = :id"); 
    $dynamicCon->bindValue(":id", $id);
    $dynmicCon->execute();
    

    等等

    【讨论】:

    • 感谢您的回复!
    猜你喜欢
    • 2014-05-29
    • 2012-06-11
    • 2016-03-31
    • 1970-01-01
    • 2018-06-22
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多