How to use many custom validators in same field

In the same field I have two possible types of data: CPF and CNPJ. I’m using a custom component for validations individually, like:

['cnpj', CnpjValidator::className(), 'skipOnError' => true]


['cpf', CpfValidator::className(), 'skipOnError' => true]

but I tried using the two classes for the same field cnpj_cpf and it didn’t succeeded. The rules will be applied individually based on the natureza attribute that belongs to the same model.

something like:

if($model->natureza == 'F'){

// apply CpfValidator::className()

else {

// apply CnpjValidator::className()


tried in rules method but always return invalid even the field is correct

public function rules()


        return [

            ['cnpj_cpf', CnpjValidator::className(), 'skipOnError' => true, 'when' => function($model){

                return $model->natureza == 'J';


            ['cnpj_cpf', CpfValidator::className(), 'skipOnError' => true, 'when' => function($model){

                return $model->natureza == 'F';



I see this topic has been answer in stackOverflow


uncheck the answer in SO, i got that problem