Size: a a a

2021 May 24

b

batyrmastyr in Yii Framework 3
Которые может отловить валидация.
источник

В

Виктор in Yii Framework 3
Например, опечатку в конфиге
источник

СП

Сергей Предводителев... in Yii Framework 3
Например, прописали в конфигурации:

MyService::class => ['__construct()' => 'hello'],

C включенной валидацией сразу при запуске приложения появится ошибка Invalid definition: incorrect constructor arguments. Expected array, got string..

С выключенной валидацией эту ошибку можно будет обнаружить только в момент, когда из контейнера будет запрошен этот класс.
источник

В

Виктор in Yii Framework 3
Без серьезного покрытия приемочными тестами можно легко пропустить ошибку конфига на невнимательность. Опечатка, не тот уровень массива и т.п. Конечно, эта фича не нужна, если 100% проекта приемочными тестами покрыто.
источник

ДД

Дмитрий Дим... in Yii Framework 3
прошу прощения)
источник

NO

Nex Otaku in Yii Framework 3
Ну во-первых почему это ошибка?

У меня там может быть объект который в коде используется ноль раз.

Следовательно он никогда не упадëт с ошибкой. И зачем тогда его запрещать?

Второе.

Может быть объект, который проинициализируется нормально только в определëнном окружении, например, толькт в консоли, только в веб, только с определëнными настройками окружения, только с запущенным редисом и т.п., а в остальных случаях упадëт с ошибкой.

Понятно что так делать некрасиво, но накладывая такое ограничение на контейнер вы тем самым лишаете разработчика возможности работать с любым кодом. Это жирный минус фреймворку.

Третье.

Если вдруг команда разработки решила, что каждый объект должен быть проверен на возможность создания и это жëсткое правило в проекте, не логичнее сделать специальную команду для этого?

Еë можно запускать точно так же, как сейчас запускаются юнит-тесты. Причëм и локально и в CI перед выкаткой на прод.
источник

СП

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

Второе и третье - не актуально, мы не создаём объекты, а лишь валидируем конфиг.
источник

NO

Nex Otaku in Yii Framework 3
Любой флаг подобных "настроек", меняющих поведение, это тревожный звоночек что какой-то кусок логики недостаточно проработан...
источник

AB

Alexander Borisov in Yii Framework 3
А если, к примеру, у нас есть что-то вроде MyInterface::class => MyClass::class, затем мы добавляем какой-нибудь скалярный параметр в MyClass, т.о. он больше не может быть автоматически проинстанцированым. Такую ошибку валидация поймает?
источник

СП

Сергей Предводителев... in Yii Framework 3
"добавляем какой-нибудь скалярный параметр в MyClass"
Это как? Не понял вопрос :(
источник

В

Виктор in Yii Framework 3
Валидатор проверяет валидность схемы конфига, не более
источник

В

Виктор in Yii Framework 3
Если схема валидна - работаем дальше. Никаких инициализаций и других проверок больше не делается.
источник

AB

Alexander Borisov in Yii Framework 3
было MyClass::__construct() - автовайринг мог сам разрулить все, стало - MyClass::__construct(string $someToken) - и тут уже автоваринг ничего не сделает
источник

NO

Nex Otaku in Yii Framework 3
Как определяется что схема валидна?
источник

СП

Сергей Предводителев... in Yii Framework 3
Сходи код посмотри :)
источник

СП

Сергей Предводителев... in Yii Framework 3
Нет, это не проверяется. Проверяется лишь валидность схемы конфига
источник

NO

Nex Otaku in Yii Framework 3
Хреново, когда усложняется контейнер и разработчики отсылают ковырять код.
источник

СП

Сергей Предводителев... in Yii Framework 3
Ты спрашиваешь о реализации
источник

NO

Nex Otaku in Yii Framework 3
Было бы отдельной командой, не было бы проблем
источник

СП

Сергей Предводителев... in Yii Framework 3
нет смысла
источник