zorca
@zorca Автор вопроса, куратор тега WordPress
Евгений Вольф, а что перехватывать, если при создании класса просто выходит страница с нормальным 200 кодом? Никаких исключений не выплевывает. Я и спросил, может у кого есть рецепт.
zorca, ага, вот значит как... Я не эксперт по WP (и любым другим CMS), но по идее, если верить вот этой штуке может быть в $last_error что-то есть? Или может сам класс как-то видоизменяется? Или, может $ready чем-то может помочь? Или что-нибудь ещё из того списка?
Написано
zorca
@zorca Автор вопроса, куратор тега WordPress
Евгений Вольф, прикол в том, что все заканчивается на создании класса. ) Если для стандартной базы это вариант неплох, то при подключении к сторонней я просто ничего не могу поделать с этим поведением. Пока решил через проверку коннекта через PDO.
zorca, вот тут не совсем понятно... что происходит после создания класса и с чем это связано? В том смысле, вот создаёс мы класс, удаленная база "того" (отвалилась) и... 404, белый экран, редирект, fatal error? Что именно происходит в этот момент? Если в try/catch обернуть создание класса, при неудачно коннекте - поведение никак не меняется?
Лично меня смущает @ если выключен WP_DEBUG.
Сам mysqli_real_connect() кажется bool возвращает.
В самом классе wpdb exceptions нету. Отлов ошибок там "трушный вордпрессовский" :) Мне кажется, что смотреть $wpdb_ex->last_error - наиболее реалистичный вариант.
Написано
zorca
@zorca Автор вопроса, куратор тега WordPress
Игорь Воротнёв, wpdb отдает нормальную страницу просто при создании ))) До $wpdb_ex->last_error просто не доходит дело. Щас залезу в этот класс. Кину ссылку на конкретную строку.
Написано
zorca
@zorca Автор вопроса, куратор тега WordPress
Евгений Вольф, пишу уже третий раз - при создании класса отдается страница ошибки с кодом 200.
То есть, если не получилось подключиться - выводится либо кастомная страничка ошибки, либо конкретный меседж, который выводится с помощью $this->bail( $message, 'db_connect_fail' );
В методе bail
Написано
zorca
@zorca Автор вопроса, куратор тега WordPress
Игорь Воротнёв, ага, только при создании объекта мы сразу коннектимся к базе и не можем задать никаких параметров для коннекта. https://github.com/WordPress/WordPress/blob/master...
Не думал такую странность в ядре WP встретить. Выходит что опция не имеет смысла.
Как вариант сделать extend класса и переписать __construct(). Удивился просто, что из коробки это не работает как хотелось бы.
Не думал такую странность в ядре WP встретить. Выходит что опция не имеет смысла.
Я там и не такие странности встречал :)))
А Вы не рассматривали вариант "коннекта к базе напрямую" без интерфейса WP, через какой-нибудь там, допустим, mysqli_ например?
Я понимаю конечно, что это идеологически хреновый вариант, но мне кажется коннектится к внешней базе, внутри темы... - вариант не менее хреновый, идеологически :)
zorca, посмотри как реализован аналогичный класс в плагине Query Monitor. Может подтолкнет)
Написано
zorca
@zorca Автор вопроса, куратор тега WordPress
Евгений Вольф, ну такова специфика Wordpress, бизнес-логика пишется или в теме, или в плагине. В теме проще. Естественно внутри там уже все разбито на классы и даже контроллеры, просто подключается это все в теме. Я сейчас перехожу на фреймворк Themosis, там уже гораздо приятнее все сделано.