На каждую форму создать модель:
Код: Выделить всё
class PageForm extends \yii\base\Model
{
/**
* @var int
*/
public $id;
/**
* @var string
*/
public $url;
/**
* @var string
*/
public $title;
/**
* @var string
*/
public $text;
/**
* @var string
*/
public $meta_title;
/**
* @var string
*/
public $meta_description;
/**
* @var string
*/
public $meta_keywords;
/**
* @var int
*/
public $visible;
/**
* @var int
*/
public $status;
/**
* @inheritdoc
*/
public function attributeLabels()
{
return array_merge((new Page())->attributeLabels(), [
]);
}
/**
* @inheritdoc
*/
public function scenarios()
{
return [
'create' => ['url', 'title', 'text', 'meta_title', 'meta_description', 'meta_keywords', 'visible', 'status'],
'update' => ['url', 'title', 'text', 'meta_title', 'meta_description', 'meta_keywords', 'visible', 'status'],
];
}
/**
* @inheritdoc
*/
public function rules()
{
return [
// Обязательные поля
[['title', 'text', 'url', 'status', 'visible'], 'required'],
// Заголовок, описание, ключевые слова и название страницы
[['meta_title', 'meta_description', 'meta_keywords'], 'filter', 'filter' => 'trim'],
[['meta_title', 'meta_description', 'meta_keywords'], 'string'],
['title', 'filter', 'filter' => 'trim'],
['title', 'string', 'max' => 100],
// Статус
['status', 'in', 'range' => array_keys(Page::getStatusArray())],
['visible', 'in', 'range' => array_keys(Yii::$app->formatter->booleanFormat)],
// Текст [[text]]
//['text', 'filter', 'filter' => 'htmlspecialchars'],
['text', 'string', 'max' => 10000],
// Url адрес
['url', 'unique', 'targetAttribute' => 'url', 'targetClass' => Page::className()],
['url', 'string', 'max' => 16],
['url', 'match', 'pattern' => '/^[a-zA-Z0-9-_.]+$/'],
];
}
/**
* Создать новую страницу
* @return bool
*/
public function create()
{
}
/**
* Редактировать страницу
* @return bool
*/
public function update()
{
}
}
К примеру у меня в валидации есть unique проверка на url страницы. Если бы все было сделано через обычную модель унаследованную от актив рекорда, то там есть Attributes и OldAttributes, благодаря этому все бы порешалось.
В моем случае при редактировании нет таких возможностей, поэтому в действии редактирования нужно садить огород, а unique валидатор всегда плюется, что такое уже занято.
Подскажите пожалуйста как можно красиво разрулить без огорода ?