2017-01-10 32 views
2

Я должен выполнить проверку, как указано в названии, что требуется одно из двух полей (электронная почта, телефон). Я делаю это в моем model:Yii2: Любое одно поле обязательно. Валидация

[['email'],'either', ['other' => ['phone']]], 

И это метод:

public function either($attribute_name, $params) { 
     $field1 = $this->getAttributeLabel($attribute_name); 
     $field2 = $this->getAttributeLabel($params['other']); 
     if (empty($this->$attribute_name) && empty($this->$params['other'])) { 
      $this->addError($attribute_name, Yii::t('user', "either {$field1} or {$field2} is required.")); 
      return false; 
     } 
     return true; 
    } 

Когда я получить доступ к моей странице индекса, это дает мне эту ошибку:

Exception (Unknown Property) 'yii\base\UnknownPropertyException' with message 'Setting unknown property: yii\validators\InlineValidator::0'

Любая помощь ?

+0

Параметры не должны быть в массиве. – Bizley

+0

Изменены параметры, которые не должны быть в массиве, по-прежнему такая же ошибка! – Saani

+0

Попробуйте добавить фигурные скобки в 'empty ($ this -> {$ params ['other']})' – Bizley

ответ

1

Правило должно быть:

['email', 'either', 'params' => ['other' => 'phone']], 

И метод:

public function either($attribute_name, $params) 
{ 
    $field1 = $this->getAttributeLabel($attribute_name); 
    $field2 = $this->getAttributeLabel($params['other']); 
    if (empty($this->$attribute_name) || empty($this->{$params['other']})) { 
     $this->addError($attribute_name, Yii::t('user', "either {$field1} or {$field2} is required.")); 
    } 
} 
+0

Большое спасибо! Это сработало! – Saani