久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

      <legend id='S7eIw'><style id='S7eIw'><dir id='S7eIw'><q id='S7eIw'></q></dir></style></legend>

      • <bdo id='S7eIw'></bdo><ul id='S7eIw'></ul>
    1. <i id='S7eIw'><tr id='S7eIw'><dt id='S7eIw'><q id='S7eIw'><span id='S7eIw'><b id='S7eIw'><form id='S7eIw'><ins id='S7eIw'></ins><ul id='S7eIw'></ul><sub id='S7eIw'></sub></form><legend id='S7eIw'></legend><bdo id='S7eIw'><pre id='S7eIw'><center id='S7eIw'></center></pre></bdo></b><th id='S7eIw'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='S7eIw'><tfoot id='S7eIw'></tfoot><dl id='S7eIw'><fieldset id='S7eIw'></fieldset></dl></div>
      <tfoot id='S7eIw'></tfoot>

    2. <small id='S7eIw'></small><noframes id='S7eIw'>

    3. 如何在 slim 4 中設(shè)置和注入多個 PDO 數(shù)據(jù)庫連接

      How to set up and inject multiple PDO database connections in slim 4?(如何在 slim 4 中設(shè)置和注入多個 PDO 數(shù)據(jù)庫連接?)
      <tfoot id='bjzX2'></tfoot>
      <legend id='bjzX2'><style id='bjzX2'><dir id='bjzX2'><q id='bjzX2'></q></dir></style></legend>
    4. <i id='bjzX2'><tr id='bjzX2'><dt id='bjzX2'><q id='bjzX2'><span id='bjzX2'><b id='bjzX2'><form id='bjzX2'><ins id='bjzX2'></ins><ul id='bjzX2'></ul><sub id='bjzX2'></sub></form><legend id='bjzX2'></legend><bdo id='bjzX2'><pre id='bjzX2'><center id='bjzX2'></center></pre></bdo></b><th id='bjzX2'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='bjzX2'><tfoot id='bjzX2'></tfoot><dl id='bjzX2'><fieldset id='bjzX2'></fieldset></dl></div>

          <small id='bjzX2'></small><noframes id='bjzX2'>

            <bdo id='bjzX2'></bdo><ul id='bjzX2'></ul>

                  <tbody id='bjzX2'></tbody>
                本文介紹了如何在 slim 4 中設(shè)置和注入多個 PDO 數(shù)據(jù)庫連接?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

                問題描述

                我可以創(chuàng)建一個 PDO 的實(shí)例并成功注入它.我直接定義了 PDO::class 并用 __construct(PDO $pdo) 將它注入到構(gòu)造函數(shù)中.我需要像 PDO1::classPDO2::class 之類的東西來注入它,如下所示:__construct(PDO1 $pdo1, PDO2 $pdo2) 但這顯然行不通.只有一個 PDO 類,我需要做的是它的 2 個具有不同數(shù)據(jù)庫憑據(jù)的實(shí)例.
                最好的方法是什么?

                I could make an instance of PDO and inject it successfully. I defined the PDO::class directly and injected it in the constructor with __construct(PDO $pdo). I would need something like PDO1::class and PDO2::class to inject it like follows: __construct(PDO1 $pdo1, PDO2 $pdo2) but that obviously doesn't work. There is only one PDO class and what I need to do is 2 instances of it with different database credentials.
                What is the best way to do it?

                我像這樣通過 PDO 設(shè)置了一個數(shù)據(jù)庫定義并且它可以工作:

                I set up one definition of a database via PDO like this and it works:

                文件:dependencies.php

                use DIContainerBuilder;
                use PsrContainerContainerInterface;
                
                return function (ContainerBuilder $containerBuilder) {
                    $containerBuilder->addDefinitions([
                        PDO::class => function (ContainerInterface $c) {
                            $dbSettings = $c->get('settings')['db1'];
                            $dsn = 'mysql:host=' . $dbSettings['host'] . ';dbname=' . $dbSettings['dbname'];
                            $options = [
                                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                                PDO::ATTR_EMULATE_PREPARES => false,
                            ];
                            return new PDO($dsn, $dbSettings['user'], $dbSettings['pass'], $options);
                        },
                    ]);
                };
                

                文件:index.php

                ...
                // Set up dependencies
                $dependencies = require __DIR__ . '/../app/dependencies.php';
                $dependencies($containerBuilder);
                // Build PHP-DI Container instance
                $container = $containerBuilder->build();
                // Set container to create App with on AppFactory
                AppFactory::setContainer($container);
                // Instantiate the app
                $app = AppFactory::create();
                ...
                

                文件 SomeRepository.php

                use PDO;
                
                class SomeRepository{
                
                    protected $pdo;
                
                    public function __construct(PDO $pdo) {
                        $this->pdo = $pdo;
                    }
                }
                

                我在這篇文章中看到過類似的內(nèi)容:

                I've seen something like this in this article:

                return function (ContainerBuilder $containerBuilder) {
                    $containerBuilder->addDefinitions([
                        'db1' => function (ContainerInterface $c) {
                            $db1Settings = $c->get('settings')['db1'];
                            $dsn = 'mysql:host=' . $db1Settings['host'] . ';dbname=' . $db1Settings['dbname'];
                            $options = [ ... ];
                            return new PDO($dsn, $db1Settings['user'], $db1Settings['pass'],$options);
                        },
                        'db2' => function (ContainerInterface $c) {
                            $db2Settings = $c->get('settings')['db2'];
                            $dsn = 'mysql:host=' . $db2Settings['host'] . ';dbname=' . $db2Settings['dbname'];
                            $options = [ ... ];
                            return new PDO($dsn, $db2Settings['user'], $db2Settings['pass'],$options);
                        },
                
                    ]);
                };
                

                但這是最好的方法嗎?以及如何在不必注入整個容器的情況下訪問存儲庫類中的連接?

                But is it the best way to do it? And how can I access the connections in a repository class without having to inject the whole container?

                推薦答案

                您有多種選擇:

                1. 擴(kuò)展 PDO
                2. 自動裝配的對象

                1.擴(kuò)展 PDO

                use PDO;
                
                class PDO2 extends PDO
                {
                    // must be empty
                }
                

                容器定義:

                use PDO2;
                
                // ...
                
                return [
                    PDO::class => function (ContainerInterface $container) {
                        return new PDO(...);
                    },
                
                    PDO2::class => function (ContainerInterface $container) {
                        return new PDO2(...);
                    },
                ];
                

                使用

                use PDO;
                use PDO2;
                
                class MyRepository
                {
                    private $pdo;
                
                    private $pdo2;
                    
                    public function __construct(PDO $pdo, PDO2 $pdo2)
                    {
                        $this->pdo = $pdo;
                        $this->pdo2 = $pdo2;
                    }
                }
                

                2.自動裝配對象

                參見 Matthieu Napoli 的回答:https://stackoverflow.com/a/57758106/1461181

                See Matthieu Napoli's answer: https://stackoverflow.com/a/57758106/1461181

                這篇關(guān)于如何在 slim 4 中設(shè)置和注入多個 PDO 數(shù)據(jù)庫連接?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

                【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

                相關(guān)文檔推薦

                Deadlock exception code for PHP, MySQL PDOException?(PHP、MySQL PDOException 的死鎖異常代碼?)
                PHP PDO MySQL scrollable cursor doesn#39;t work(PHP PDO MySQL 可滾動游標(biāo)不起作用)
                PHP PDO ODBC connection(PHP PDO ODBC 連接)
                Using PDO::FETCH_CLASS with Magic Methods(使用 PDO::FETCH_CLASS 和魔術(shù)方法)
                php pdo get only one value from mysql; value that equals to variable(php pdo 只從 mysql 獲取一個值;等于變量的值)
                MSSQL PDO could not find driver(MSSQL PDO 找不到驅(qū)動程序)

                  <bdo id='HGnN0'></bdo><ul id='HGnN0'></ul>

                      1. <i id='HGnN0'><tr id='HGnN0'><dt id='HGnN0'><q id='HGnN0'><span id='HGnN0'><b id='HGnN0'><form id='HGnN0'><ins id='HGnN0'></ins><ul id='HGnN0'></ul><sub id='HGnN0'></sub></form><legend id='HGnN0'></legend><bdo id='HGnN0'><pre id='HGnN0'><center id='HGnN0'></center></pre></bdo></b><th id='HGnN0'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='HGnN0'><tfoot id='HGnN0'></tfoot><dl id='HGnN0'><fieldset id='HGnN0'></fieldset></dl></div>

                        • <legend id='HGnN0'><style id='HGnN0'><dir id='HGnN0'><q id='HGnN0'></q></dir></style></legend>

                          <small id='HGnN0'></small><noframes id='HGnN0'>

                            <tbody id='HGnN0'></tbody>
                          <tfoot id='HGnN0'></tfoot>
                          主站蜘蛛池模板: 成人乱人乱一区二区三区软件 | 亚洲精品粉嫩美女一区 | 国产精品一区在线 | 午夜激情网 | 国产精品精品久久久 | aaa综合国产 | 一区二区中文 | 国产97在线 | 日韩 | 一区二区三区在线看 | 国产精品a免费一区久久电影 | 精品免费国产一区二区三区 | 精精国产xxxx视频在线播放 | 欧美一级淫片免费视频黄 | 成人av免费 | 欧美天堂 | 国产免费一区二区三区 | 91精品国产91久久久久久 | 免费黄色录像视频 | caoporn视频 | 国产精品久久国产精品99 gif | 久久国产99 | aaa国产大片 | 国产精品视频网 | 国产精品激情小视频 | 亚洲最大av网站 | 午夜影院 | 国内精品久久久久久久影视简单 | 国产精品久久久久久久久久久新郎 | 91精品国产欧美一区二区 | 国产高清视频在线 | 国内精品久久精品 | 午夜精品一区 | 成人在线播放网站 | 爱爱视频在线观看 | 看片国产 | 四虎成人免费电影 | 久久com | 一区在线视频 | 成人精品国产免费网站 | 亚洲中午字幕 | 午夜精品一区二区三区在线观看 |