Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. DateTimeValueResolver.php

class DateTimeValueResolver

Convert DateTime instances from request attribute variable.

@author Benjamin Eberlei <kontakt@beberlei.de> @author Tim Goudriaan <tim@codedmonkey.com>

Hierarchy

  • class \Symfony\Component\HttpKernel\Controller\ArgumentResolver\DateTimeValueResolver implements \Symfony\Component\HttpKernel\Controller\ValueResolverInterface

Expanded class hierarchy of DateTimeValueResolver

1 file declares its use of DateTimeValueResolver
MapDateTime.php in vendor/symfony/http-kernel/Attribute/MapDateTime.php

File

vendor/symfony/http-kernel/Controller/ArgumentResolver/DateTimeValueResolver.php, line 27

Namespace

Symfony\Component\HttpKernel\Controller\ArgumentResolver
View source
final class DateTimeValueResolver implements ValueResolverInterface {
    public function __construct(?ClockInterface $clock = null) {
    }
    public function resolve(Request $request, ArgumentMetadata $argument) : array {
        if (!is_a($argument->getType(), \DateTimeInterface::class, true) || !$request->attributes
            ->has($argument->getName())) {
            return [];
        }
        $value = $request->attributes
            ->get($argument->getName());
        $class = \DateTimeInterface::class === $argument->getType() ? \DateTimeImmutable::class : $argument->getType();
        if (!$value) {
            if ($argument->isNullable()) {
                return [
                    null,
                ];
            }
            if (!$this->clock) {
                return [
                    new $class(),
                ];
            }
            $value = $this->clock
                ->now();
        }
        if ($value instanceof \DateTimeInterface) {
            return [
                $value instanceof $class ? $value : $class::createFromInterface($value),
            ];
        }
        $format = null;
        if ($attributes = $argument->getAttributes(MapDateTime::class, ArgumentMetadata::IS_INSTANCEOF)) {
            $attribute = $attributes[0];
            $format = $attribute->format;
        }
        if (null !== $format) {
            $date = $class::createFromFormat($format, $value, $this->clock?->now()
                ->getTimeZone());
            if (($class::getLastErrors() ?: [
                'warning_count' => 0,
            ])['warning_count']) {
                $date = false;
            }
        }
        else {
            if (false !== filter_var($value, \FILTER_VALIDATE_INT, [
                'options' => [
                    'min_range' => 0,
                ],
            ])) {
                $value = '@' . $value;
            }
            try {
                $date = new $class($value, $this->clock?->now()
                    ->getTimeZone());
            } catch (\Exception) {
                $date = false;
            }
        }
        if (!$date) {
            throw new NotFoundHttpException(\sprintf('Invalid date given for parameter "%s".', $argument->getName()));
        }
        return [
            $date,
        ];
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
DateTimeValueResolver::resolve public function Returns the possible value(s). Overrides ValueResolverInterface::resolve
DateTimeValueResolver::__construct public function

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal