Think Different
Think Different

Reputation: 2815

Yii2 model custom rules and validations for attribute which is array

Being trying to sort this out but going nowhere with it. I have got an array as attribute for a model and I am trying to create custom validation for some of the keys in the array as required. Or even can't figure out how the attribute labels will work? Here is my code:

MODEL

 ...
 public $company = [
                    'name'                  => '',
                    'trading_name'          => '',
                    'type'                  => '',
                ];

 public function attributeLabels(){
    return [
            'company[name]' => 'Company Name',
    ];
 }   

 public function rules(){

    return [
             [['company[name]','company[trading_name'], 'safe'],
             [['company[name]'], 'return_check','skipOnEmpty'=> false],

    ];
 }  

 public function return_check($attribute, $params){

    $this->addError($attribute  ,'Required ');
    return false;
 }
 ...

I have even tried to pass the whole array and check in the validator method for the keys and values but the custom validator is not even triggered.

Upvotes: 0

Views: 1619

Answers (2)

Aldo Bassanini
Aldo Bassanini

Reputation: 485

I've used custom rule functions, and they all worked. Try removing the return clause at the end of the return_check function.

Here's what has worked for me:

class Essid extends ActiveRecord {
    public function rules() {
        return [
            ['network_name', 'checkNetworkName']
        ]
    }

    public function checkNetworkName($attribute, $params){
        if (!$this->hasErrors()) {
            if ( !ctype_alnum($this->network_name) )
                $this->addError($attribute, Yii::t('app', 'Not a valid Network Name'));
        }
    }
}

Hope it helps

Upvotes: 0

Konstantin
Konstantin

Reputation: 566

I think you need separated model for company.

Upvotes: 1

Related Questions