Вы можете использовать валидаторы объекты, как это:
use yii\validators\Validator;
use yii\validators\NumberValidator;
use yii\validators\StringValidator;
class TestModel extends \yii\base\Model
{
public $firstProperty;
public $secondProperty;
public function rules()
{
return [
new NumberValidator(['attributes' => ['firstProperty'], 'integerOnly' => true, 'min' => 0, 'max' => 100]),
new StringValidator(['attributes' => ['secondProperty'], 'max' => 5]),
];
}
}
Кроме того, вы можете украсить эти объекты, как вы хотите (с помощью дополнительных классов и методов):
class TestModel extends \yii\base\Model
{
public $firstProperty;
public $secondProperty;
public function rules()
{
// Prepare Int validator
$validatorInt = new NumberValidator();
$validatorInt->integerOnly = true;
$validatorInt->min = 0;
$validatorInt->max = 100;
// Prepare String validator
$validatorString = new StringValidator();
$validatorString->max = 5;
// Make rules
return [
static::_makeRule(['firstProperty'], $validatorInt),
static::_makeRule(['secondProperty'], $validatorString),
];
}
protected function _makeRule($attrName, Validator $validatorObj)
{
$validatorObj = clone $validatorObj;
$validatorObj->attributes = (array)$attrName;
$validatorObj->init(); // Initializes validator and normalizes values
return $validatorObj;
}
}
Для оптимизации производительности I Угадай. – Bizley
AFAIK, разница в производительности очень мала между массивами и объектами. –
См. Http://stackoverflow.com/questions/2193049/php-objects-vs-arrays и https://gist.github.com/Thinkscape/1136563. PHP улучшает оптимизацию массива с каждой версией. – Bizley