Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Использование dbal для коннекта к другой БД в расширении

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Andex
phpBB 1.4.2
Сообщения: 59
Стаж: 17 лет 10 месяцев
Благодарил (а): 5 раз
Поблагодарили: 6 раз

Использование dbal для коннекта к другой БД в расширении

Сообщение Andex »

Задача такая: нужно средствами dbal законнектиться к сторонней БД, т.е. грубо говоря, поднять еще один дополнительный коннект в расширении. ДБ никак не связана с самим phpbb, прросто оттуда нужно взять данные.

К сожалению, документация есть только для 3.0 Database Abstraction Layer , что для 3.1 неприменимо.
Как в 3.1 это реализовать? Какая там вообще схема в данном случае, как правильно построить работу? :?

Спасибо

Отправлено спустя 2 часа 19 минут 42 секунды:
В общем, немного погуглив, решение нашел, оставлю тут, вдруг кому пригодится. Ну и к гуру вопрос, нормальная ли это реализация?

Итак, services.yml выглядит примерно так:

Код: Выделить всё

services:
    author.Extension.listener:
        class: author\Extension\event\listener
        arguments:
            - @dbal.conn
            - @request
            - @config
            - @user
            - @dbal.conn2
            - %core.root_path%
            - %core.php_ext%
            - %core.table_prefix%
        tags:
            - { name: event.listener }
    dbal.conn2:
        class: %dbal.driver.class%
Сразу пошу прощения, с Symfony практически не знаком, поэтому могу сказать какую-то глупость, неправильно оперировать терминологией и пр.
Собтвенно, ко всяким разным классами/переменным, используемым в сервисе listener, добавляем еще один сервис dbal.conn2 с классом %dbal.driver.class% (в моем случае значение этой переменной, кажется, \phpbb\db\driver\mysqli) Ну и потом этот сервис в виде аргумента перетается в "основной" сервис расширения listener.
Как я понимаю, можно было бы и не морочиться с этим дополнительным сервисом, а просто создать элемент класса %dbal.driver.class% сразу в listener. Или я не прав?

Далее конуструктор класса listener выглядит так

Код: Выделить всё

public function __construct(\phpbb\db\driver\driver_interface $db, \phpbb\request\request_interface $request, \phpbb\config\config $config, \phpbb\user $user,\phpbb\db\driver\driver_interface $db2, $root_path, $php_ext, $table_prefix)
	{
		$this->db = $db;
		$this->request = $request;
		$this->config = $config;
		$this->user = $user;
		$this->db2 = $db2;

		$this->root_path = $root_path;
		$this->php_ext = $php_ext;
		$this->table_prefix = $table_prefix;
	}
В результате в $this->db2 мы имеем экземпляр класса, mysqli и дальше как обычно $this->db2->connect(........) и т.д.

В таком подходе может возникнуть проблема, если тип сторонней базы или интерфейс подключения к ней отличен от phpbb-шного (т.е. в данном случае не mysqli) - но тогда, как я понимаю, можно было бы просто создать экзепляр нужного класса прямо в listener.

Да, ссылка, которая помогла: https://www.phpbb.com/community/viewtop ... &t=2248926
Перенесено из форума Поддержка phpBB 3.1.x в форум Для авторов 22.11.2016 22:10 модератором Sheer

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Использование dbal для коннекта к другой БД в расширении

Сообщение rxu »

Реализация нормальная, тем более, что дана основным разработчиком версии 3.2.
Изображение
Ответить

Вернуться в «Для разработчиков»