Часто возникает необходимость провалидировать какие-то данные пришедшие извне, но для которых нет модели. Так как валидация в 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());