И так, решение проблемы. Модель имеет метод под названием onUnsafeAttribute. Данный метод вызывается в том случае, если была передана в модель какая либо переменная, которая не была объявлена. Концепт следующий:
1) В представлении, other[name1..n] используем other_name1..n
2) Определим переменную в модели $other типа array
3) Переопределим функцию onUnsafeAttribute и сделаем запись в наш массив.
4) В правилах огласим кэллбэк на нашу переменную и в нем будем перебирать наш массив.
<?php
namespace backend\models;
use Yii;
use backend\models\Model;
use backend\filters\Filter;
class MySuperModel extends Model
{
public $name;
public $other = [];
public function rules()
{
return [
[['name','other'], 'required'],
['other', 'checkOther'],
];
}
public function attributeLabels()
{
return [
'id' => 'ID',
'name' => 'Name',
];
}
public function onUnsafeAttribute($name, $value)
{
if( ! strpos('other_', $name) ) {
list($other, $name) = explode('_', $name);
$this->other[$name] = $value;
}
}
public function checkOther(string $attribute)
{
if( ! is_array($this->$attribute) ) {
return false;
}
$errors = [];
foreach( $this->$attribute as $name => $value ) {
$filter = Filter::run($this->site_id, $name, $value);
$name = 'other_' . $name;
if( ! $filter ) {
$errors[$name] = Yii::t('messages', 'Field does not exist');
continue;
}
}
if( !empty($errors) ) {
return $this->addErrors($errors);
}
return true;
}
}