PHP Joomla 4. Как отлавливать исключения объекта работы с базой данных или как для этой цели модифицировать класс?
Ранее был написан модуль, который умеет работать с Wordpress, Joomla и Bitrix, и который использует для подключения к БД драйвер, предусмотренный CMS.
Таким образом, при работе с любой CMS для использования указанной библиотеки требовалось для использования просто подключить класс библиотеки, и сразу можно использовать её методы, не важно какая CMS, то есть, кроссплатформенно.
Указанная библиотека при первом использовании создаёт таблицу в базе данных для хранения различных своих данных, при этом момент необходимости создания таблицы определялся в момент, когда при SELECT-запросе к несуществующей таблице срабатывало исключение.
После того, как Joomla обновилась (вышла какая то из 4-ых версий), метод $db->query()
заменил на $db->execute()
, это казалось бы не проблема - была дописана логика, определяющая, в зависимости от версии Joomla, какой метод использовать, при этом в в методе execute
используется обработчик исключений от Joomla, который ловит ситуацию отсутствия таблицы в БД выдаёт HTML-страницу ошибки 500 и мой обработчик исключений не срабатывает - следовательно, таблица не создаётся.
Делать метод для Joomla, который на этапе начала работы с библиотекой создаст таблицу - такой себе вариант, поскольку с разными CMS с библиотекой нужно уже работать по-разному и просто бы избежать бы лишнего действия и обучения для потенциального пользователя библиотеки.
Проверять перед SQL SELECT-запросом наличие таблицы вариант так же не очень, потому что так то бы эту таблицу 1 раз создать и далее только использовать, то есть так получается запрос, который в более чем 99.99% случаев лишний, и его бы тоже избежать.
И как раз исключение для создания таблицы при её отсутствии решало эту проблему.
Рассматриваю вариант унаследовать свой класс, в котором будет метод execute
и в котором не будет отлавливаться исключение и использовать его в своей библиотеке, при этом получается приличная часть кода переписывается для этой цели.
Может, есть какой то другой вариант? Например, может быть можно как-то переопределить механизм исключений Joomla 4, чтобы именно в данном случаe он не сработал, а затем (после выполнения нужного запроса) вернуть настройки в исходное состояние?
Или может быть как-то SQL запрос можно модифицировать, чтобы из результата его выполнения было понятно, что таблицы не существует?