Правила Yii2 работают только сценарий использования - PullRequest
0 голосов
/ 06 июня 2018

Я пишу два сценария в модели комментариев Yii2, когда пользователь вошел в систему или является гостем.

Мои правила:

public function rules()
    {
        return [
            [['user_id'], 'required', 'on' => self::SCENARIO_USER],
            [['name', 'email'], 'required', 'on' => self::SCENARIO_GUEST],
            [['post_id', 'body', 'date'], 'required'],
            [['user_id', 'parent_id', 'post_id', 'status'], 'integer'],
            [['body'], 'string'],
            [['date'], 'safe'],
            [['name', 'email', 'site'], 'string', 'max' => 256],
        ];
    }

и функция senarios:

public function scenarios()
{
    $scenarios = parent::scenarios();
    $scenarios[self::SCENARIO_GUEST] = ['name' , 'email'];
    $scenarios[self::SCENARIO_USER] = ['user_id'];
    return $scenarios;
}

Я использую его следующим образом:

$commentModel = Yii::$app->user->isGuest ? new Comment(['scenario' => Comment::SCENARIO_GUEST]) : new Comment(['scenario' => Comment::SCENARIO_USER]);

если проверена гостевая форма, проверяются только имя и адрес электронной почты, а также пользовательская форма, поле не проверено!почему другие правила не проверяют?как это исправить?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Если вы используете scenarios(), вам необходимо определить все атрибуты, которые можно назначить в данном сценарии.Поэтому, если вы хотите разрешить гостю редактировать также body и date, вам нужно что-то вроде:

public function scenarios()
{
    $scenarios = parent::scenarios();
    $scenarios[self::SCENARIO_GUEST] = ['name' , 'email', 'body', 'date'];
    $scenarios[self::SCENARIO_USER] = ['user_id'];
    return $scenarios;
}

Если у вас много «общих» атрибутов между сценариями, вам, вероятно, не следует переопределять этот метод иопределите его только в rules().

Подробнее см. в документации .

0 голосов
/ 06 июня 2018

См. Сценарии Yii2

Метод scenarios () возвращает массив, ключами которого являются имена сценариев, и значения соответствующих активных атрибутов.Активный атрибут может быть назначен массово и подлежит проверке.

public function scenarios()
{
     $scenarios = parent::scenarios();
     $scenarios[self::SCENARIO_GUEST] = ['name' , 'email', 'date', 'body', 'site', 'post_id'];
     $scenarios[self::SCENARIO_USER] = ['user_id', 'date', 'body', 'site', 'post_id'];
     return $scenarios;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...