Size: a a a

2020 November 16

AM

Alexander Makarov in Yii Framework 3
так ругается когда в scrutinizer на заведена репка
источник

Д

Дмитрий in Yii Framework 3
Понял, спасибо.
Если всё ок - можно ревьювить. С пхп 8 там пока видимо с токенами проблема.
источник
2020 November 17

SI

Sergei Iamskoi in Yii Framework 3
Как-то уже поднимался вопрос про финальные классы в фреймворке. Решили что-нибудь? Столкнулся с проблемой, что коннекшен к постгресу финальный - а мне надо было для него декоратор сделать. Получается, что меня фреймворк ограничивает в расширении, и я тупо не могу им пользоваться. Имхо надо final выпиливать, а то на большом кол-ве классов он уже висит.
источник

AB

Alexander Borisov in Yii Framework 3
Чтобы сделать декоратор - не надо наследоваться же…
источник

SI

Sergei Iamskoi in Yii Framework 3
Надо, что бы можно было его передавать вместо родителя.
источник

AB

Alexander Borisov in Yii Framework 3
Тут нужна зависимость от интерфейса
источник

В

Виктор in Yii Framework 3
Sergei Iamskoi
Как-то уже поднимался вопрос про финальные классы в фреймворке. Решили что-нибудь? Столкнулся с проблемой, что коннекшен к постгресу финальный - а мне надо было для него декоратор сделать. Получается, что меня фреймворк ограничивает в расширении, и я тупо не могу им пользоваться. Имхо надо final выпиливать, а то на большом кол-ве классов он уже висит.
Поднимался и решался. Решили так: если класс финальный и в нем что-то не настраивается - это баг. Если нужна другая реализация и нет интерфейса - тоже баг.
источник

В

Виктор in Yii Framework 3
А финализировать - это хорошо, т.к. способствует развитию фреймворка, ибо не нужно заботиться об обратной совместимости с потенциальными наследниками.
источник

SI

Sergei Iamskoi in Yii Framework 3
Alexander Borisov
Тут нужна зависимость от интерфейса
В этом случае это уже не декоратор, а другая реализация интерфейса.
источник

AB

Alexander Borisov in Yii Framework 3
источник

AB

Alexander Borisov in Yii Framework 3
Идея в том, что декораторов может быть неограниченно много и они друг о друге не знают. С наследованием так не выйдет
источник

SI

Sergei Iamskoi in Yii Framework 3
Да, так тоже ок в идеальном случае, но вот Yiisoft\Db\Connection не имеет интерфейса для > 80% публичных методов. И создав декоратор от ConnectionInterface там будет только 7 методов. Но тут уже больше вопрос не к финалу, а к интерфейсам фреймворка.
источник

AB

Alexander Borisov in Yii Framework 3
Думаю имеет смысл создать issue с твоим кейсом. «если класс финальный и в нем что-то не настраивается - это баг.»
источник

AM

Alexander Makarov in Yii Framework 3
Или сразу PR с расширением интерфейса.
источник

m

mj4444 in Yii Framework 3
Sergei Iamskoi
Как-то уже поднимался вопрос про финальные классы в фреймворке. Решили что-нибудь? Столкнулся с проблемой, что коннекшен к постгресу финальный - а мне надо было для него декоратор сделать. Получается, что меня фреймворк ограничивает в расширении, и я тупо не могу им пользоваться. Имхо надо final выпиливать, а то на большом кол-ве классов он уже висит.
А можно пример? Похоже вы хотите что то сделать не правильно...
источник

SI

Sergei Iamskoi in Yii Framework 3
mj4444
А можно пример? Похоже вы хотите что то сделать не правильно...
Я уже поковырял коннекшен, похоже он мне тоже не сильно поможет, даже без final - слишком много переопределять придется. Проблема не совсем типовая: приложение не умирающее, живет в памяти с помощью RoadRunner. И ждет на сокете подключения клиента. Таких воркеров 1000. В один момент, с базой что-нибудь случилось, или с сетью - не важно, коннешен к ней умер и сразу поднялся. И во всех 1000 инстансах приложения, в уже существующих $connection->pdo связь оборвана, но это никак не возможно ни проверить, ни обработать на уровне класса Connection. isActive проверяет только инстанцирования PDO - оно есть, а подлючение в нем уже нет. Думал сделать какую-нить обертку и в ней в случае падения запроса пробовать пересоздавать подключение, и если не удалось - то уже эксепшен. Но похоже придется все это обрабатывать на уровне репозитория (( Но даже тут проблема в том, что  методы open и close в ConnectionInterface не поисаны, сейчас на это PR сделаю. Если есть идеи как такую ситуацию можно обработать - будет интересно выслучашть.
источник

AM

Alexander Makarov in Yii Framework 3
Хм... а может доработать isActive чтобы проверял ещё и состояние PDO?
источник

AM

Alexander Makarov in Yii Framework 3
Или это невозможно узнать без пинга?
источник

SI

Sergei Iamskoi in Yii Framework 3
Пока какой-нить sql запрос не выполнить, это никак не узнать даже через PDO.
источник

В

Виктор in Yii Framework 3
В моей голове решение выглядит как некий сервис с методом actualizeConnection, который выполняет простой запрос, и в случае падения из-за отсутствия соединения пытается восстановить его.
источник