/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php
80 строк
3 KB
Javier Eguiluz
[FrameworkBundle] Remove unused code from legacy controller notation in DelegatingLoader
31 июл 2026, 12:05
31 июл 2026, 12:05
af623c3
Код
Авторство
О чём код?
<?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 Symfony\Bundle\FrameworkBundle\Routing; use Symfony\Component\Config\Exception\LoaderLoadException; use Symfony\Component\Config\Loader\DelegatingLoader as BaseDelegatingLoader; use Symfony\Component\Config\Loader\LoaderResolverInterface; use Symfony\Component\Routing\RouteCollection; /** * DelegatingLoader delegates route loading to other loaders using a loader resolver. * * @author Fabien Potencier <fabien@symfony.com> * * @final */ class DelegatingLoader extends BaseDelegatingLoader { private bool $loading = false; public function __construct( LoaderResolverInterface $resolver, private array $defaultOptions = [], private array $defaultRequirements = [], ) { parent::__construct($resolver); } public function load(mixed $resource, ?string $type = null): RouteCollection { if ($this->loading) { // This can happen if a fatal error occurs in parent::load(). // Here is the scenario: // - while routes are being loaded by parent::load() below, a fatal error // occurs (e.g. parse error in a controller while loading annotations); // - PHP abruptly empties the stack trace, bypassing all catch/finally blocks; // it then calls the registered shutdown functions; // - the ErrorHandler catches the fatal error and re-injects it for rendering // thanks to HttpKernel->terminateWithException() (that calls handleException()); // - at this stage, if we try to load the routes again, we must prevent // the fatal error from occurring a second time, // otherwise the PHP process would be killed immediately; // - while rendering the exception page, the router can be required // (by e.g. the web profiler that needs to generate a URL); // - this handles the case and prevents the second fatal error // by triggering an exception beforehand. throw new LoaderLoadException($resource, null, 0, null, $type); } $this->loading = true; try { $collection = parent::load($resource, $type); } finally { $this->loading = false; } if ($this->defaultOptions || $this->defaultRequirements) { foreach ($collection->all() as $route) { if ($this->defaultOptions) { $route->setOptions($route->getOptions() + $this->defaultOptions); } if ($this->defaultRequirements) { $route->setRequirements($route->getRequirements() + $this->defaultRequirements); } } } return $collection; } }