Есть два действия, использующие одну модель для представления формы и сохранения данных. В форме для одного из действий часть полей скрыта. Можно ли каким-нибудь образом сделать правила валидации модели опциональными, чтобы для одного из действий поле было обязательным для заполнения, а для другого действия оно не проверялось (поскольку оно даже не отображается в форме)? Или, иначе, как можно модели узнать, какая action ее использует в данный момент?
Да, это возможно. Посмотрите в документации раздел сценариев модели. Если вкратце, то вы можете в действиях контролера явно указать какой сценарий модели использовать, примерно таким образом:
$model->scenario='foo';
А в правилах валидации можно четко указать в пределах каких атрибутов использовать тот или иной сценарий:
public function rules()
{
return array(
...
'bar'=>array('email','on'=>'foo'),
...
);
}
Ещё не забудьте, что метод safeAttributes() в модели при использовании сценариев в случае необходимости тоже следует модифицировать соответствующим образом.