2015-07-06 3 views
3

Есть 2 необходимые функции: установить пароль при регистрации и смене пароля, если пользователь забыли его. Когда пользователь подписывается, длина пароля должна быть не менее 4 символов; когда изменения проходят - не менее 5 символов.Yii2: сценарии() модельный метод

Вид является общим для регистрации и смены прохода. Очевидно, что существует также 2 действия, в которых используется либо сценарий «регистрация», либо «изменение». Фрагмент кода в модели:

public function rules() { 
    return [ 
     ['password', 'string', 'min' => 4, 'on' => 'signup'], 
     ['password', 'string', 'min' => 5, 'on' => 'change'], 
    ]; 
} 

Но я хочу сделать это с помощью сценариев(). Как это сделать? Я новичок в Yii, поэтому не понял, когда и как использовать сценарии (). Благодарю.

UPD. Мне нужно использовать сценарии() для ONE поля с ONE правило, но РАЗЛИЧНЫХ аргументов к этому правилу. how to define a scenario in Yii2? - это НЕ мое дело.

+1

Возможный дубликат [как определить сценарий в Yii2?] (Http://stackoverflow.com/questions/31112079/how-to-define-a-scenario-in-yii2) – Tony

+0

@ Тони, нет и нет ! Я понимаю, как использовать _scenarios() _ для проверки _required_. Но в моей ситуации пропуск в обоих случаях сохраняется. Мне нужно использовать сценарии() для поля ONE с правилом ONE, но DIFFERENT аргументы этому правилу. –

+0

@ Тони, извините, кажется, я случайно удалил ваш комментарий. Я пробовал, но поведение кода становится неправильным. Мне просто нужен пример, понимаешь? Если я напишу, как сказал: _ $ scenarios ['signup'] = ['password']; _ и _ $ scenarios ['signin'] = ['password']; _, как мой _rules() _ метод нужно изменить? Как я понимаю, я должен удалить _on_ при использовании _scenarios() _. Но это будет неправильно. В противном случае, если мне не нужно изменять _rules() _, какой смысл писать _scenarios() _? Без него он отлично работает. –

ответ

6

Как documentation about scenarios() говорит: По умолчанию реализация этого метода вернет все сценарии, найденные в объявлении rules(). Так что обычно вам не нужно переопределять этот метод, потому что он будет искать ключи массива on, чтобы установить активные атрибуты для текущего сценария, чтобы их правильно проверить.

Так что в вашем случае 'on' => 'some scenario' для разных валидаций с тем же атрибутом именно то, что вам нужно.

+2

большое спасибо! Я думаю, я начинаю понимать разницу между _on_ и _scenario() _ использованием. Первый используется, если нам нужно применить сценарий для конкретного правила ** **: '['password', 'required', 'on' => 'register'] ['password', 'integer', ' на»=> 'another_scenario'] ' И _scenario() _ используется, если необходимо применить сценарий для бетона ** атрибутов **: 'сценарий общественных функций() { $ сценарии = родительского :: сценария(); $ scenarios ['signin'] = 'password'; // Правила ALL применяются к полю пропуска при использовании сценария «signin» return $ scenarios; } ' Я прав в своих предположениях? –

+2

@Boolean_Type: абсолютно, это правильно (хотя вы бы делали сценарии $ $ ['signin'] = ['password']; ', т. Е. Использовать массив атрибутов, которые установлены и проверены в этом сценарии). – tarleb

Смежные вопросы