Вход Регистрация
Файл: vendor/symfony/routing/Generator/CompiledUrlGenerator.php
Строк: 96
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentRoutingGenerator;

use 
PsrLogLoggerInterface;
use 
SymfonyComponentRoutingExceptionRouteNotFoundException;
use 
SymfonyComponentRoutingRequestContext;

/**
 * Generates URLs based on rules dumped by CompiledUrlGeneratorDumper.
 */
class CompiledUrlGenerator extends UrlGenerator
{
    private array 
$compiledRoutes = [];
    private ?
string $defaultLocale;

    public function 
__construct(array $compiledRoutesRequestContext $context, ?LoggerInterface $logger null, ?string $defaultLocale null)
    {
        
$this->compiledRoutes $compiledRoutes;
        
$this->context $context;
        
$this->logger $logger;
        
$this->defaultLocale $defaultLocale;
    }

    public function 
generate(string $name, array $parameters = [], int $referenceType self::ABSOLUTE_PATH): string
    
{
        
$locale $parameters['_locale']
            ?? 
$this->context->getParameter('_locale')
            ?: 
$this->defaultLocale;

        if (
null !== $locale) {
            do {
                if ((
$this->compiledRoutes[$name.'.'.$locale][1]['_canonical_route'] ?? null) === $name) {
                    
$name .= '.'.$locale;
                    break;
                }
            } while (
false !== $locale strstr($locale'_'true));
        }

        if (!isset(
$this->compiledRoutes[$name])) {
            throw new 
RouteNotFoundException(sprintf('Unable to generate a URL for the named route "%s" as such route does not exist.'$name));
        }

        [
$variables$defaults$requirements$tokens$hostTokens$requiredSchemes$deprecations] = $this->compiledRoutes[$name] + [=> []];

        foreach (
$deprecations as $deprecation) {
            
trigger_deprecation($deprecation['package'], $deprecation['version'], $deprecation['message']);
        }

        if (isset(
$defaults['_canonical_route']) && isset($defaults['_locale'])) {
            if (!
in_array('_locale'$variablestrue)) {
                unset(
$parameters['_locale']);
            } elseif (!isset(
$parameters['_locale'])) {
                
$parameters['_locale'] = $defaults['_locale'];
            }
        }

        return 
$this->doGenerate($variables$defaults$requirements$tokens$parameters$name$referenceType$hostTokens$requiredSchemes);
    }
}
Онлайн: 1
Реклама