public function rules()
{
return array(
array('email','email'),
array('email','unique','on'=>'create'),
array('login','unique','on'=>array('create')),
array('verifyCode', 'captcha', 'allowEmpty'=>!Yii::app()->user->isGuest),
);
}
так вот, только прописываю свойство "on" (в любой интерпретации и в качестве строки и в качестве массива), проверка на уникальность перестает работать, что грустно.
При различных сценариях будут применяться соответствующие правила валидации, а те, что без "on" - во всех случаях.
Зачем нужно? Ну самое простое - использовать специальные (дополнительные) правила валидации для незарегестрированных пользователей, установив "on" => "guest".
в модели в @on@ соответственно "create" пишешь. В beforeValidate я б это не пихал т.к. тогда для всего контроллера будет считаться что ты используешь этот сценарий. а ошибка у тебя потому что scenario это атрибут модели, а не контроллера
т.е. в контроллере будет вот так:
$model = new ModelName();
$model->attributes = $_POST['...'];
...
$model->scenario = "create";
if ($model->validate()) {
$model->save();
}
в тру ООП все равно красивее использовать уже сеттер а не запоминать названия всех атрибутов в голове. т.к. они в будущем могут меняться, а имена сеттера обычно оставляют
Да. Но Yii при таком обращении (->scenario = ‘abc’) ищет метод с именем setScenario. А уж в том методе может быть написано всё, что угодно, например $this->_scenarioooo = $value;
В общем, пора завязывать с обсуждением геттеров и сеттеров (а по-правильному, они свойствами зовутся).