/** * Validate file by attribute validate rules * Return array of errors * * @param array $value * @return string[] */ protected function _validateByRules($value) { $label = $this->getAttribute()->getStoreLabel(); $rules = $this->getAttribute()->getValidateRules(); $extension = pathinfo($value['name'], PATHINFO_EXTENSION); if (!empty($rules['file_extensions'])) { $extensions = explode(',', $rules['file_extensions']); $extensions = array_map('trim', $extensions); if (!in_array($extension, $extensions)) { return [__('"%1" is not a valid file extension.', $label)]; } } /** * Check protected file extension */ if (!$this->_fileValidator->isValid($extension)) { return $this->_fileValidator->getMessages(); } if (!is_uploaded_file($value['tmp_name'])) { return [__('"%1" is not a valid file.', $label)]; } if (!empty($rules['max_file_size'])) { $size = $value['size']; if ($rules['max_file_size'] < $size) { return [__('"%1" exceeds the allowed file size.', $label)]; } } return []; }
/** * Validate file by attribute validate rules * Return array of errors * * @param array $value * @return string[] */ protected function _validateByRules($value) { $label = $value['name']; $rules = $this->getAttribute()->getValidationRules(); $extension = pathinfo($value['name'], PATHINFO_EXTENSION); $fileExtensions = ArrayObjectSearch::getArrayElementByName($rules, 'file_extensions'); if ($fileExtensions !== null) { $extensions = explode(',', $fileExtensions); $extensions = array_map('trim', $extensions); if (!in_array($extension, $extensions)) { return [__('"%1" is not a valid file extension.', $extension)]; } } /** * Check protected file extension */ if (!$this->_fileValidator->isValid($extension)) { return $this->_fileValidator->getMessages(); } if (!$this->_isUploadedFile($value['tmp_name'])) { return [__('"%1" is not a valid file.', $label)]; } $maxFileSize = ArrayObjectSearch::getArrayElementByName($rules, 'max_file_size'); if ($maxFileSize !== null) { $size = $value['size']; if ($maxFileSize < $size) { return [__('"%1" exceeds the allowed file size.', $label)]; } } return []; }
/** * Check protected/allowed extension * * @param string $extension * @return boolean */ public function checkAllowedExtension($extension) { //validate with protected file types if (!$this->_validator->isValid($extension)) { return false; } return parent::checkAllowedExtension($extension); }
public function testIsValid() { $this->assertTrue($this->_model->isValid('html')); $this->assertTrue($this->_model->isValid('jpg')); $this->assertFalse($this->_model->isValid('php')); $this->assertFalse($this->_model->isValid('jar')); $this->assertFalse($this->_model->isValid('exe')); }