{"record":{"id":"5efa6f1bdc90549b","repo":"symfony/symfony","slug":"an-asset-package-cannot-have-base-urls-and-base-pa","errorCode":null,"errorMessage":"An asset package cannot have base URLs and base paths.","messagePattern":"An asset package cannot have base URLs and base paths\\.","errorType":"exception","errorClass":"LogicException","httpStatus":null,"severity":"error","filePath":"src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php","lineNumber":1516,"sourceCode":"\n        $container->getDefinition('asset_mapper.compressor')->replaceArgument(0, $compressors ?: null);\n\n        if ($config['precompress']['enabled']) {\n            $container\n                ->getDefinition('asset_mapper.local_public_assets_filesystem')\n                ->addArgument(new Reference('asset_mapper.compressor'))\n                ->addArgument($config['precompress']['extensions'])\n            ;\n        }\n    }\n\n    /**\n     * Returns a definition for an asset package.\n     */\n    private function createPackageDefinition(?string $basePath, array $baseUrls, Reference $version): Definition\n    {\n        if ($basePath && $baseUrls) {\n            throw new \\LogicException('An asset package cannot have base URLs and base paths.');\n        }\n\n        $package = new ChildDefinition($baseUrls ? 'assets.url_package' : 'assets.path_package');\n        $package\n            ->replaceArgument(0, $baseUrls ?: $basePath)\n            ->replaceArgument(1, $version)\n        ;\n\n        return $package;\n    }\n\n    private function createVersion(ContainerBuilder $container, ?string $version, ?string $format, ?string $jsonManifestPath, string $name, bool $strictMode): Reference\n    {\n        // Configuration prevents $version and $jsonManifestPath from being set\n        if (null !== $version) {\n            $def = new ChildDefinition('assets.static_version_strategy');\n            $def\n                ->replaceArgument(0, $version)","sourceCodeStart":1498,"sourceCodeEnd":1534,"githubUrl":"https://github.com/symfony/symfony/blob/698e28026c22cf35d032cdb6e800db48b1535790/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php#L1498-L1534","documentation":"Thrown when registering an asset package that defines both 'base_urls' and 'base_paths' simultaneously. An asset package resolves URLs in exactly one way — either by prepending a base path (for same-origin assets) or by selecting from a set of base URLs (for CDN-served assets). Defining both is contradictory. The check is at FrameworkExtension.php:1515-1516 in createPackageDefinition().","triggerScenarios":"Under 'framework.assets.packages.<name>', setting both 'base_paths' and 'base_urls' keys. The createPackageDefinition() method receives both as non-null/non-empty and throws.","commonSituations":"Developer configures an asset package and inadvertently includes both base_paths (for local dev) and base_urls (for production CDN), not realizing they're mutually exclusive. Common when environment-specific configs are merged.","solutions":["Use only base_urls if assets are served from a CDN or external domain.","Use only base_paths if assets are served from the same origin.","To handle dev vs prod differences, use environment-specific config files (e.g., config/packages/dev/framework.yaml vs prod/framework.yaml) each with one or the other."],"exampleFix":"# before\nframework:\n    assets:\n        packages:\n            cdn_images:\n                base_paths: ['images']\n                base_urls: ['https://cdn.example.com']\n\n# after\nframework:\n    assets:\n        packages:\n            cdn_images:\n                base_urls: ['https://cdn.example.com']","handlingStrategy":"validation","validationCode":"foreach ($config['framework']['assets']['packages'] ?? [] as $name => $pkg) {\n    $hasBasePaths = !empty($pkg['base_paths']);\n    $hasBaseUrls = !empty($pkg['base_urls']);\n    if ($hasBasePaths && $hasBaseUrls) {\n        throw new \\LogicException(\"Asset package '{$name}' cannot have both base_paths and base_urls.\");\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Choose one strategy per package: base_paths for local, base_urls for CDN.","Use environment-specific config files for dev/prod differences instead of mixing.","Review asset package configs after merging environment-specific YAML."],"tags":["configuration","assets","symfony"],"analyzedSha":"698e28026c22cf35d032cdb6e800db48b1535790","analyzedAt":"2026-08-06T23:40:49.025Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}