Совсем маленький не критический вопросик...

При описание правил валидизации введенных пользователем атрибутов модели сказано:


Примечание: Задавая правила для модели Active Record, мы можем использовать специальный параметр on.

Этот параметр может быть типа 'insert' или 'update', и правило применяется соответственно в случае 

добавления или обновления записи. Если параметр не задан, то правило применяется в обоих случаях,

когда вызывается save().

Т.е., если я пишу такое вот правило:


   array('username', 'authenticate','on'=>'insert'),

то ожидаю, что оно действует при добавление записи, и не действует при корректировки существующей записи.

Однако, этого не происходит и приходится при добавление записи писать:


 $model=user('insert');

Может я не совсем понимаю "специальный параметр on"… ?

"on" указывает на сценарий (scenario).

По дефолту код




new Model;



Вернет модель со сценарием ‘insert’.

Когда я пишу:


  array('username', 'authenticate','on'=>'insert'),

А потом при добавление записи пишу:

$model=user;

то, при валидизации, когда выполняется save(), метод модели authenticate

не вызывается.

Если же, как обычно для любого сценария (сценарий insert - вроде как какой-то специальный),

при добавление записи пишу:

$model=user(‘insert’);

то метод модели authenticate вызывается.

Иными словами, в правиле валидизации слово insert не обозначает что-то специальное,

а представляет собой имя обычного сценария.

Да, только сценарий

Тогда это из документации как понимать :


Примечание: Задавая правила для модели Active Record, мы можем использовать специальный параметр on.

Этот параметр может быть типа 'insert' или 'update', и правило применяется соответственно в случае 

добавления или обновления записи. Если параметр не задан, то правило применяется в обоих случаях,

когда вызывается save().



?

ну это и есть примеры сценариев =)

Не




$model = user;



Нужно так




$model = new user;



И уже в конструкторе CActiveRecord будет задан сценарий ‘insert’.

В том-то и дело, что не будет…"$model = user;" - здесь у меня просто опечатка.

/framework/db/ar/CActiveRecord.php - смотрим метод __construct() и убеждаемся, что будет :)

Проверил еще раз. Действительно, если в правиле пишешь ‘on’=>‘insert’,

и создаешь модель без спецификации сценария:

$model=new user;

то для такой модели данное правило участвует в валидизации.

Прошу прощения за беспокойство, видимо в момент написания поста был сильно перегрет.