code: 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]);
      }
docs: {@inheritdoc}