public function beforeValidate($event) { $image = UploadedFile::getInstance($this->owner, $this->attribute); if ($image) { $validator = new ImageValidator($this->rules); if (!$validator->validate($image, $error)) { $this->owner->addError($this->attribute, $error); } else { $filename = md5(file_get_contents($image->tempName)) . "." . $image->extension; $image->saveAs(rtrim(Yii::getAlias($this->destination), '/') . '/' . $filename); $this->owner->{$this->attribute} = $filename; } } }
/** * @param ActiveRecord $owner */ public function attach($owner) { parent::attach($owner); // Применяем конфигурационные опции foreach ($this->imageConfig as $key => $value) { $var = '_' . $key; $this->{$var} = $value; } // Вычисляем корень сайта if (empty($this->_rootPathAlias)) { $savePathParts = explode('/', $this->_savePathAlias); // Удаляем последнюю часть unset($savePathParts[count($savePathParts - 1)]); // Объединяем все части обратно $this->_rootPathAlias = implode('/', $savePathParts); } // Добавляем валидатор require if ($this->_imageRequire) { $owner->validators->append(Validator::createValidator(RequiredValidator::className(), $owner, $this->_imageAttribute)); } // Подключаем валидатор изображения $validatorParams = array_merge(['extensions' => $this->_fileTypes, 'maxSize' => $this->_maxFileSize, 'skipOnEmpty' => true, 'tooBig' => 'Изображение слишком велико, максимальный размер: ' . floor($this->_maxFileSize / 1024 / 1024) . ' Мб'], $this->_imageValidatorParams); $validator = Validator::createValidator(ImageValidator::className(), $owner, $this->_imageAttribute, $validatorParams); $owner->validators->append($validator); }
/** * @inheritdoc */ protected function defaultValidators() { return [ImageValidator::className()]; }
/** * @throws \yii\base\InvalidConfigException */ protected function addValidator() { unset($this->validator['maxFiles']); /* @var $validator \yii\validators\FileValidator|\yii\validators\ImageValidator */ $validator = \Yii::createObject(array_merge(['class' => $this->image ? \yii\validators\ImageValidator::className() : \yii\validators\FileValidator::className(), 'attributes' => [$this->attribute]], $this->validator)); $this->owner->getValidators()->offsetSet($this->getValidatorIndex(), $validator); }