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

Breadcrumb

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

function DateTimeValueResolver::resolve

Overrides ValueResolverInterface::resolve

File

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

Class

DateTimeValueResolver
Convert DateTime instances from request attribute variable.

Namespace

Symfony\Component\HttpKernel\Controller\ArgumentResolver

Code

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,
    ];
}

API Navigation

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