Ключевой момент - массовое назначение будет толькобыть сделано для полей, которые прошли какое-то явное правило проверки.Очевидные «фактические» валидаторы - длина, адрес электронной почты, требуемый и т. Д. - все соответствуют требованиям, но некоторые поля имеют произвольную форму и являются необязательными, и не имеют никаких требований к формату - пользователь может указать все, что ему нравится, в том числе оставить его пустым.
Я признаю, что не потратил время, чтобы полностью это подтвердить, но, насколько я помню,, вы не правы, смешивая валидацию с заданием.Если память работает правильно, при массовом назначении ($ model-> setAttributes ($ _ POST ['Model'])) фактическая проверка не выполняется.Скорее, для каждого атрибута в массиве POST / GET модель проверяет, является ли этот атрибут безопасным для назначения (проверяя, существует ли для этого атрибута проверка или безопасное правило, фактически не проверяя его) - если он существует, то он устанавливаетатрибут, если нет, он игнорирует его.
Проверка происходит только при вызове $ model-> save () (или явно $ model-> validate ()), когда проверяются уже назначенные атрибутыиспользуя правила проверки.
Стоит также упомянуть, что массовое назначение и индивидуальное назначение фактически не эквивалентны - массовое назначение проверяет, существует ли правило проверки или безопасное для каждого атрибута, тогда как если вы делаете отдельное назначение ($ model-> attribute = $ _POST ['Model'] ['attribute'];) такая проверка не выполняется - Yii предполагает, что атрибуция является доверенной.