Параметризованная автопроводка с PHP-DI

Я задаюсь вопросом о наилучшей практике для этого варианта использования:

У меня есть и приложение, которое имеет дело с собственной базой данных и другими настроенными пользователем базами данных. Я внедряю соединение с собственной базой данных с помощью PHP-DI, например так:

<?php
use function DI\get;
use function DI\factory;

use App\DB\Connection;
use App\DB\ConnectionFactory;

return [
    'app.db.connection' => [
        'driver' => 'pdo_mysql',
        'host' => '127.0.0.1',
        'dbname' => '',
        'user' => '',
        'password' => ''
    ],
    Connection::class => factory([ConnectionFactory::class, 'createConnection'])
        ->parameter('params', get('app.db.connection')),    
];

Но я хочу иметь общедоступные соединения с другими базами данных, чьи параметры соединения индексируются по некоторому ключу:

'app.endpoints' => add([
    'endpoint1' => [
        'driver' => 'pdo_sqlsrv',
        ...
    ],
    'endpoint2' => [...],
    'endpoint3' => [...],
]),

В моих контроллерах или консольных командах (которые легки и не проверены) я хочу иметь что-то вроде:

$connectionManager->get('endpoint1') // Maybe $connectionFactory...?

Но я хочу, чтобы экземпляр объекта подключения создавался только один раз, и, если возможно, конструктор объекта подключения вводился с некоторыми зависимостями с помощью автоматической разводки, например, с помощью регистратора.

0 ответов

Другие вопросы по тегам