framework/validators/EachValidator.php
public function validateAttribute($model, $attribute)
    {
        $value = $model->$attribute;
        if (!is_array($value) && !$value instanceof \ArrayAccess) {
            $this->addError($model, $attribute, $this->message, []);
            return;
        }

        $validator = $this->getValidator($model); // ensure model context while validator creation

        $detectedErrors = $model->getErrors($attribute);
        $filteredValue = $model->$attribute;
        foreach ($value as $k => $v) {
            $model->clearErrors($attribute);
            $model->$attribute = $v;
            if (!$validator->skipOnEmpty || !$validator->isEmpty($v)) {
                $validator->validateAttribute($model, $attribute);
            }
            $filteredValue[$k] = $model->$attribute;
            if ($model->hasErrors($attribute)) {
                if ($this->allowMessageFromRule) {
                    $validationErrors = $model->getErrors($attribute);
                    $detectedErrors = array_merge($detectedErrors, $validationErrors);
                } else {
                    $model->clearErrors($attribute);
                    $this->addError($model, $attribute, $this->message, ['value' => $v]);
                    $detectedErrors[] = $model->getFirstError($attribute);
                }
                $model->$attribute = $value;

                if ($this->stopOnFirstError) {
                    break;
                }
            }
        }

        $model->$attribute = $filteredValue;
        $model->clearErrors($attribute);
        $model->addErrors([$attribute => $detectedErrors]);
    }
public function validateAttribute($model, $attribute)
    {
        $value = $model->$attribute;
        if (!is_array($value) && !$value instanceof \ArrayAccess) {
            $this->addError($model, $attribute, $this->message, []);
            return;
        }

        $validator = $this->getValidator($model); // ensure model context while validator creation

        $detectedErrors = $model->getErrors($attribute);
        $filteredValue = $model->$attribute;
        foreach ($value as $k => $v) {
            $model->clearErrors($attribute);
            $model->$attribute = $v;
            if (!$validator->skipOnEmpty || !$validator->isEmpty($v)) {
                $validator->validateAttribute($model, $attribute);
            }
            $filteredValue[$k] = $model->$attribute;
            if ($model->hasErrors($attribute)) {
                if ($this->allowMessageFromRule) {
                    $validationErrors = $model->getErrors($attribute);
                    $detectedErrors = array_merge($detectedErrors, $validationErrors);
                } else {
                    $model->clearErrors($attribute);
                    $this->addError($model, $attribute, $this->message, ['value' => $v]);
                    $detectedErrors[] = $model->getFirstError($attribute);
                }
                $model->$attribute = $value;

                if ($this->stopOnFirstError) {
                    break;
                }
            }
        }

        $model->$attribute = $filteredValue;
        $model->clearErrors($attribute);
        $model->addErrors([$attribute => $detectedErrors]);
    }
public function validateAttribute ( $ model , $ attribute ) { $ value = $ model -> $ attribute ; if ( ! is_array ( $ value ) && ! $ value instanceof \ ArrayAccess ) { $ this -> addError ( $ model , $ attribute , $ this -> message , [ ] ) ; return ; } $ validator = $ this -> getValidator ( $ model ) ; // ensure model context while validator creation $ detectedErrors = $ model -> getErrors ( $ attribute ) ; $ filteredValue = $ model -> $ attribute ; foreach ( $ value as $ k => $ v ) { $ model -> clearErrors ( $ attribute ) ; $ model -> $ attribute = $ v ; if ( ! $ validator -> skipOnEmpty || ! $ validator -> isEmpty ( $ v ) ) { $ validator -> validateAttribute ( $ model , $ attribute ) ; } $ filteredValue [ $ k ] = $ model -> $ attribute ; if ( $ model -> hasErrors ( $ attribute ) ) { if ( $ this -> allowMessageFromRule ) { $ validationErrors = $ model -> getErrors ( $ attribute ) ; $ detectedErrors = array_merge ( $ detectedErrors , $ validationErrors ) ; } else { $ model -> clearErrors ( $ attribute ) ; $ this -> addError ( $ model , $ attribute , $ this -> message , [ 'value' => $ v ] ) ; $ detectedErrors [ ] = $ model -> getFirstError ( $ attribute ) ; } $ model -> $ attribute = $ value ; if ( $ this -> stopOnFirstError ) { break ; } } } $ model -> $ attribute = $ filteredValue ; $ model -> clearErrors ( $ attribute ) ; $ model -> addErrors ( [ $ attribute => $ detectedErrors ] ) ; }
{@inheritdoc}
{