Валидация данных без модели в yii

Часто возникает необходимость провалидировать какие-то данные пришедшие извне, но для которых нет модели. Так как валидация в yii это неотъемлемая часть модели, а на каждый чих делать отдельный класс не хотелось, мне пришлось написать небольшой класс который решил для меня эту проблему:

<?php

class Validator extends CModel  
{
    private $_rules = [];

    function __construct(array $rules = [])
    {
        $this->_rules = $rules;
    }

    public function __set($name, $value)
    {
        $setter = 'set' . $name;
        if (method_exists($this, $setter)) {
            return $this->$setter($value);
        }

        return $this->$name = $value;
    }

    public function __get($name)
    {
        $getter = 'get' . $name;
        if (method_exists($this, $getter)) {
            return $this->$getter();
        }

        return null;
    }

    public function attributeNames()
    {
        return $this->getSafeAttributeNames();
    }

    public function rules()
    {
        return $this->_rules;
    }
}

Как видите получилось очень просто - в конструкторе задаем набор правил, который потом возвращается в методе rules. Обратите внимание на метод attributeNames - так как при определении класса мы не можем знать как будут называться атрибуты модели, то мы просто берем их название из переданного набора правил. К тому же пришлось переопределить методы __get и __set чтобы разрешить задавать любые значения для объекта, в противном случае при любой попытке задать любое свойство кидался бы эксепшен Property "Validator.<propertyname>" is not defined..

Использовать этот валидатор очень просто:

$v = new Validator([
    ['amount', 'required'],
]);

$v->attributes = [
    'amount' => 100,
];

var_dump($v->validate());