symfony/routing · error · BadMethodCallException

Cannot unserialize Loader\Configurator\ImportConfigurator

Error message

Cannot unserialize Loader\Configurator\ImportConfigurator

What it means

The matching __unserialize() of ImportConfigurator also unconditionally throws BadMethodCallException. Since __serialize() always throws, no valid serialized representation exists; unserializing data into ImportConfigurator is always invalid.

Solutions

  1. Remove ImportConfigurator instances from any serialized payload; store route definitions or the built RouteCollection instead.
  2. Purge/regenerate cache and session data containing these objects.
  3. Rebuild routing configuration at runtime from its config files rather than deserializing objects.

Example fix

// before
$config = unserialize($cached);
// after
$collection = new RouteCollection();
(new RoutingConfigurator($collection))->import($file);
Defensive patterns

Strategy: validation

Validate before calling

$isSafe = array_reduce($payloadClasses, fn($ok, $c) => $ok && $c !== \Symfony\Component\Routing\Loader\Configurator\ImportConfigurator::class, true);

Type guard

function safeToUnserialize(array $allowed, string $class): bool { return in_array($class, $allowed, true) && $class !== \Symfony\Component\Routing\Loader\Configurator\ImportConfigurator::class; }

Try / catch

try { $o = unserialize($data, ['allowed_classes' => false]); } catch (\Exception $e) { /* regenerate routing config */ }

Prevention

When it happens

Trigger: unserialize() on a payload containing an ImportConfigurator object (e.g. cache/session data that captured one via nested references), or injecting a serialized object string into the app.

Common situations: Restoring stale cache files that captured configurator objects, unserializing user-supplied data that references this class, moving session data between environments.

Understand the failure class

Background: "failed to unmarshal" / json.Unmarshal errors: why parsing a response into a Go struct fails and how to fix it — this error's family across 23 libraries.

Related errors


AI-assisted analysis of symfony/routing@83fa223250 (2026-09-14). Data as JSON: /api/errors/1c7a1af9095b4287. Report an issue: GitHub.

Appendix: source

Thrown at Loader/Configurator/ImportConfigurator.php:39

    use Traits\HostTrait;
    use Traits\PrefixTrait;
    use Traits\RouteTrait;

    public function __construct(
        private RouteCollection $parent,
        RouteCollection $route,
    ) {
        $this->route = $route;
    }

    public function __serialize(): array
    {
        throw new \BadMethodCallException('Cannot serialize '.__CLASS__);
    }

    public function __unserialize(array $data): void
    {
        throw new \BadMethodCallException('Cannot unserialize '.__CLASS__);
    }

    public function __destruct()
    {
        $this->parent->addCollection($this->route);
    }

    /**
     * Sets the prefix to add to the path of all child routes.
     *
     * @param string|array $prefix the prefix, or the localized prefixes
     *
     * @return $this
     */
    final public function prefix(string|array $prefix, bool $trailingSlashOnRoot = true): static
    {
        $this->addPrefix($this->route, $prefix, $trailingSlashOnRoot);

View on GitHub (pinned to 83fa223250)