@airatkh
www.airat.info

Yii2. Как динамически подключить к Validotor class «MyBehavior» (Yii2 Behavior) чтоб его наследовали все built In Validator?

Здравствуйте Коллеги
Возможно, кто-нибудь сможет помочь.

Я хочу Динамически подключить поведение "MyValidationBehavior" (Yii2 Behavior) для всех валидаторов наследников базового класса yii\validators\Validator моего проекта.

Я написал код, который добавляет мой "MyValidationBehavior" по одному к каждому классу.
Добавляю "MyValidationBehavior" для всех built In Validator
foreach (\yii\validators\Validator::$builtInValidators as $builtInValidator)
 {
$container->set($builtInValidator, 
["as $builtInValidator" => ['class' => MyValidationBehavior::className(),]] );
 }


Но, я хочу подключить поведение динамически только для базового класса, чтоб остальный классы валидации наследовали поведение базового класса.

Как вы думаете, это возможно?

Что накопал:
1. Если подключал поведение через Component::$behaviors[]
то наследники-классы имеют заданное в базовом поведение.

2. Я пробовал подключить динамически свое поведение в "\yii\validators\Validator" но без успеха, классы-наследники были без моего поведения.
Пример попыток:
$container = \Yii::$container;
 //вариант 1
$container->set('\yii\validators\Validator',
["as Validator" => ['class' => MyValidationBehavior::className(),]]);
//вариант 2
$validator = $container->get('yii\validators\Validator');
$validator->attachBehavior('Validator', MyValidationBehavior::className());


Если нужна дополнительная информация, постараюсь ответить.

Спасибо!)

P.S.
  • Вопрос задан
  • 338 просмотров
Пригласить эксперта
Ответы на вопрос 1
@LAV45
Можно статически повесить обработчик на все события базового класса.
Вот так образом я добавил свой обработчик ко всем контроллерам
\yii\base\Event::on('yii\base\Controller', 'beforeAction', function(\yii\base\ActionEvent $event) {
// ...
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы