2016-09-12 5 views
1

У меня есть атрибут в модели, который я хочу проверить таким образом, что - он должен быть массивом и должен иметь 3 элемента, также каждый элемент внутри массива должен быть строкой. В настоящее время я использую.Правило проверки Yii2 для массива

['config', 'each', 'rule' => ['string']] 

ответ

1

Вы можете просто использовать пользовательский валидатор, например. :

['config', function ($attribute, $params) { 
    if(!is_array($this->$attribute) || count($this->$attribute)!==3){ 
     $this->addError($attribute, 'Error message'); 
    } 
}], 
['config', 'each', 'rule' => ['string']] 

Подробнее о creating validators.

0

Вы можете добавить customvalidation правила, как показано ниже:

public function rules() 
    { 
    return ['config','checkIsArray']; 

    } 



    public function checkIsArray($attribute, $params) 
     { 
      if (empty($this->config)) { 
       $this->addError('config', "config cannot be empty"); 
      } 
      elseif (!is_array($this->config)) { 
       $this->addError('config', "config must be array."); 
      } 
      elseif (count($this->config)<3) { 
       $this->addError('config', "config must have 3 elements"); 
      } 
      else{ 
      foreach ($this->config as $value) { 
       if (!is_string($value)) { 
        $this->addError('config ', "config should have only string values."); 
       } 
      } 
     } 
    } 
Смежные вопросы