Symfony\Component\Validator\Constraints\FileValidator::isValid PHP Method

isValid() public method

public isValid ( $value, Constraint $constraint )
$constraint Symfony\Component\Validator\Constraint
    public function isValid($value, Constraint $constraint)
    {
        if (null === $value || '' === $value) {
            return true;
        }

        if (!is_scalar($value) && !$value instanceof FileObject && !(is_object($value) && method_exists($value, '__toString'))) {
            throw new UnexpectedTypeException($value, 'string');
        }

        $path = $value instanceof FileObject ? $value->getPathname() : (string) $value;

        if (!file_exists($path)) {
            $this->setMessage($constraint->notFoundMessage, array('{{ file }}' => $path));

            return false;
        }

        if (!is_readable($path)) {
            $this->setMessage($constraint->notReadableMessage, array('{{ file }}' => $path));

            return false;
        }

        if ($constraint->maxSize) {
            if (ctype_digit((string) $constraint->maxSize)) {
                $size = filesize($path);
                $limit = $constraint->maxSize;
                $suffix = ' bytes';
            } else if (preg_match('/^(\d+)k$/', $constraint->maxSize, $matches)) {
                $size = round(filesize($path) / 1000, 2);
                $limit = $matches[1];
                $suffix = ' kB';
            } else if (preg_match('/^(\d+)M$/', $constraint->maxSize, $matches)) {
                $size = round(filesize($path) / 1000000, 2);
                $limit = $matches[1];
                $suffix = ' MB';
            } else {
                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum size', $constraint->maxSize));
            }

            if ($size > $limit) {
                $this->setMessage($constraint->maxSizeMessage, array(
                    '{{ size }}'    => $size.$suffix,
                    '{{ limit }}'   => $limit.$suffix,
                    '{{ file }}'    => $path,
                ));

                return false;
            }
        }

        if ($constraint->mimeTypes) {
            if (!$value instanceof FileObject) {
                $value = new FileObject($value);
            }

            if (!in_array($value->getMimeType(), (array) $constraint->mimeTypes)) {
                $this->setMessage($constraint->mimeTypesMessage, array(
                    '{{ type }}'    => '"'.$value->getMimeType().'"',
                    '{{ types }}'   => '"'.implode('", "', (array) $constraint->mimeTypes).'"',
                    '{{ file }}'    => $path,
                ));

                return false;
            }
        }

        return true;
    }

Same methods

FileValidator::isValid ( mixed $value, Constraint $constraint ) : boolean

Usage Example

Example #1
0
 public function isValid($value, Constraint $constraint)
 {
     $isValid = parent::isValid($value, $constraint);
     if (!$isValid) {
         return false;
     }
     if (null === $value || '' === $value) {
         return true;
     }
     if (null === $constraint->minWidth && null === $constraint->maxWidth && null === $constraint->minHeight && null === $constraint->maxHeight) {
         return true;
     }
     $size = @getimagesize($value);
     if (empty($size) || $size[0] === 0 || $size[1] === 0) {
         $this->setMessage($constraint->sizeNotDetectedMessage);
         return false;
     }
     $width = $size[0];
     $height = $size[1];
     if ($constraint->minWidth) {
         if (!ctype_digit((string) $constraint->minWidth)) {
             throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum width', $constraint->minWidth));
         }
         if ($width < $constraint->minWidth) {
             $this->setMessage($constraint->minWidthMessage, array('{{ width }}' => $width, '{{ min_width }}' => $constraint->minWidth));
             return false;
         }
     }
     if ($constraint->maxWidth) {
         if (!ctype_digit((string) $constraint->maxWidth)) {
             throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum width', $constraint->maxWidth));
         }
         if ($width > $constraint->maxWidth) {
             $this->setMessage($constraint->maxWidthMessage, array('{{ width }}' => $width, '{{ max_width }}' => $constraint->maxWidth));
             return false;
         }
     }
     if ($constraint->minHeight) {
         if (!ctype_digit((string) $constraint->minHeight)) {
             throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum height', $constraint->minHeight));
         }
         if ($height < $constraint->minHeight) {
             $this->setMessage($constraint->minHeightMessage, array('{{ height }}' => $height, '{{ min_height }}' => $constraint->minHeight));
             return false;
         }
     }
     if ($constraint->maxHeight) {
         if (!ctype_digit((string) $constraint->maxHeight)) {
             throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum height', $constraint->maxHeight));
         }
         if ($height > $constraint->maxHeight) {
             $this->setMessage($constraint->maxHeightMessage, array('{{ height }}' => $height, '{{ max_height }}' => $constraint->maxHeight));
             return false;
         }
     }
     return true;
 }
FileValidator