Проверки выполняются при выполнении «массового назначения» в Yii? - PullRequest
2 голосов
/ 11 февраля 2012

Я прочитал статью "Понимание" безопасных "правил проверки"

автор сказал, что:

Ключевой момент - массовое назначение будет толькобыть сделано для полей, которые прошли какое-то явное правило проверки.Очевидные «фактические» валидаторы - длина, адрес электронной почты, требуемый и т. Д. - все соответствуют требованиям, но некоторые поля имеют произвольную форму и являются необязательными, и не имеют никаких требований к формату - пользователь может указать все, что ему нравится, в том числе оставить его пустым.

Но есть комментарий :

Я признаю, что не потратил время, чтобы полностью это подтвердить, но, насколько я помню,, вы не правы, смешивая валидацию с заданием.Если память работает правильно, при массовом назначении ($ model-> setAttributes ($ _ POST ['Model'])) фактическая проверка не выполняется.Скорее, для каждого атрибута в массиве POST / GET модель проверяет, является ли этот атрибут безопасным для назначения (проверяя, существует ли для этого атрибута проверка или безопасное правило, фактически не проверяя его) - если он существует, то он устанавливаетатрибут, если нет, он игнорирует его.

Проверка происходит только при вызове $ model-> save () (или явно $ model-> validate ()), когда проверяются уже назначенные атрибутыиспользуя правила проверки.

Стоит также упомянуть, что массовое назначение и индивидуальное назначение фактически не эквивалентны - массовое назначение проверяет, существует ли правило проверки или безопасное для каждого атрибута, тогда как если вы делаете отдельное назначение ($ model-> attribute = $ _POST ['Model'] ['attribute'];) такая проверка не выполняется - Yii предполагает, что атрибуция является доверенной.

Итак, любой может показать, какиеэто правильно?

Ответы [ 2 ]

6 голосов
/ 12 февраля 2012

Поле может быть назначено массово, только если оно имеет правило проверки, тип которого не является «небезопасным».Однако он не проверяется при массовом назначении.

Он проверяется при вызове validate () или вызове save (true).

Не забывайте, что вы можете прочитать исходный код Yiiнепосредственно в своем классе Ссылка

0 голосов
/ 11 февраля 2012

Массовое назначение происходит в двух случаях - 1. Когда вы устанавливаете правило проверки для поля. В этом случае поле проходит проверку. 2. Когда вы объявляете поле безопасным. В этом случае вы можете иметь или не иметь правило проверки для поля. Задание будет проходить независимо.

Таким образом, правильный ответ - «зависит» от того, есть ли у вас правило проверки, определенное для поля, или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...