亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Slim 4 中注入多個 PDO 實例

如何在 Slim 4 中注入多個 PDO 實例

PHP
三國紛爭 2022-08-19 10:19:11
我剛剛開始使用Slim 4(也是整個Slim的全新內容),在閱讀并閱讀了一些文章之后,我設法獲得了一個具有PDO連接到DB的骨架應用程序設置。我現在正在尋找第二個PDO實例,以便可以根據請求使用第二個數據庫,盡管我正在努力了解如何執行此操作。我目前的設置是:設置.php$settings['db'] = [    'driver' => 'mysql',    'host' => 'database',    'username' => 'root',    'database' => 'demo',    'password' => 'password',    'flags' => [        // Turn off persistent connections        PDO::ATTR_PERSISTENT => false,        // Enable exceptions        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,        // Emulate prepared statements        PDO::ATTR_EMULATE_PREPARES => true,        // Set default fetch mode to array        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,    ],];容器.phpreturn [    Configuration::class => function () {        return new Configuration(require __DIR__ . '/settings.php');    },    App::class => function (ContainerInterface $container) {        AppFactory::setContainer($container);        $app = AppFactory::create();        return $app;    },    PDO::class => function (ContainerInterface $container) {        $config = $container->get(Configuration::class);        $host = $config->getString('db.host');        $dbname =  $config->getString('db.database');        $username = $config->getString('db.username');        $password = $config->getString('db.password');        $dsn = "mysql:host=$host;dbname=$dbname;";        return new PDO($dsn, $username, $password);    },];存儲庫中的用法示例class UserReaderRepository{    /**     * @var PDO The database connection     */    private $connection;    /**     * Constructor.     *     * @param PDO $connection The database connection     */    public function __construct(PDO $connection)    {        $this->connection = $connection;    }
查看完整描述

1 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

經過一番深思熟慮,我想我已經解決了。


我使用容器創建了 PDO 實例


$container = $app->getContainer();


    $container->set('db', function(ContainerInterface $c) {

        $config = $c->get(Configuration::class);


        $host = $config->getString('db.host');

        $dbname =  $config->getString('db.database');

        $username = $config->getString('db.username');

        $password = $config->getString('db.password');

        $dsn = "mysql:host=$host;dbname=$dbname;";


        return new PDO($dsn, $username, $password);

    });


    $container->set('db_readonly', function(ContainerInterface $c) {

        $config = $c->get(Configuration::class);


        $host = $config->getString('db_readonly.host');

        $dbname =  $config->getString('db_readonly.database');

        $username = $config->getString('db_readonly.username');

        $password = $config->getString('db_readonly.password');

        $dsn = "mysql:host=$host;dbname=$dbname;";


        return new PDO($dsn, $username, $password);

    });

然后將存儲庫更改為使用構造函數中的 App,然后使用容器獲取 PDO 實例


/**

     * @var PDO The database

     */

    private $db;


    /**

     * @var PDO The readonly database

     */

    private $readonly_db;


    /**

     * Constructor.

     *

     * @param App $app The database db

     */

    public function __construct(App $app)

    {

        $container = $app->getContainer();

        $this->db = $container->get('db');

        $this->readonly_db = $container->get('db_readonly');

    }

將此留在這里,以防其他人遇到問題,盡管有更好的方法可以做到這一點,或者我目前的方法可以改進,我將不勝感激的反饋


查看完整回答
反對 回復 2022-08-19
  • 1 回答
  • 0 關注
  • 113 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號