在Silex中动态添加连接到DBAL

问题描述:

我正在使用Silex框架编写PHP应用程序。我使用的原则服务提供商,我可以正常打开的连接,因为这:在Silex中动态添加连接到DBAL

$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
    'dbs.options' => array (
     'localhost' => array(
      'driver' => 'pdo_mysql', 
      'host'  => 'localhost', 
      'dbname' => 'test', 
      'user'  => 'root', 
      'password' => 'root', 
      'charset' => 'utf8', 
     ) 
    ), 
)); 

完美的作品。我现在想要的是在我的代码中添加另一个数据库连接。我知道我可以在dbs.options中添加另一个元素,但是之后我想在控制器中执行此操作(因为不同的控制器将使用不同的数据库连接)。

这可能吗?我想我可以使用类似DriverManager::getConnection($options, $config, $manager);的东西,但可能有更好的方法来做到这一点。

谢谢!

$conn = DriverManager::getConnection($params, $config); 

这是原来的代码来生成新的连接,所以你写的是确定

链接:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html

您可以配置使用与Silex的捆绑DoctrineServiceProvider多个数据库的连接。

用一组配置数组替换db.options,其中键是连接名称和值配置选项。在控制器

$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
    'dbs.options' => array (
     'mysql_read' => array(
      'driver' => 'pdo_mysql', 
      'host'  => 'mysql_read.someplace.tld', 
      'dbname' => 'my_database', 
      'user'  => 'my_username', 
      'password' => 'my_password', 
      'charset' => 'utf8', 
     ), 
     'mysql_write' => array(
      'driver' => 'pdo_mysql', 
      'host'  => 'mysql_write.someplace.tld', 
      'dbname' => 'my_database', 
      'user'  => 'my_username', 
      'password' => 'my_password', 
      'charset' => 'utf8', 
     ), 
    ), 
)); 

访问多个连接:

$app->get('/blog/{id}', function ($id) use ($app) { 
    $sql = "SELECT * FROM posts WHERE id = ?"; 
    $post = $app['dbs']['mysql_read']->fetchAssoc($sql, array((int) $id)); 

    $sql = "UPDATE posts SET value = ? WHERE id = ?"; 
    $app['dbs']['mysql_write']->executeUpdate($sql, array('newValue', (int) $id)); 

    return "<h1>{$post['title']}</h1>". 
      "<p>{$post['body']}</p>"; 
}); 

来源:http://silex.sensiolabs.org/doc/providers/doctrine.html

+0

这不是什么被问。 –