Skip to content

Commit 9de16cf

Browse files
weaverryanfabpot
authored andcommitted
[AssetMapper] Allowing for files to be written to some non-local location
1 parent cda6803 commit 9de16cf

File tree

3 files changed

+31
-17
lines changed

3 files changed

+31
-17
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1353,13 +1353,17 @@ private function registerAssetMapperConfiguration(array $config, ContainerBuilde
13531353
->setArgument(0, $paths)
13541354
->setArgument(2, $excludedPathPatterns);
13551355

1356-
$publicDirName = $this->getPublicDirectoryName($container);
13571356
$container->getDefinition('asset_mapper.public_assets_path_resolver')
1358-
->setArgument(1, $config['public_prefix'])
1359-
->setArgument(2, $publicDirName);
1357+
->setArgument(0, $config['public_prefix']);
13601358

1361-
$container->getDefinition('asset_mapper.command.compile')
1362-
->setArgument(5, $publicDirName);
1359+
$publicDirectory = $this->getPublicDirectory($container);
1360+
$publicAssetsDirectory = rtrim($publicDirectory.'/'.ltrim($config['public_prefix'], '/'), '/');
1361+
$container->getDefinition('asset_mapper.local_public_assets_filesystem')
1362+
->setArgument(0, $publicDirectory)
1363+
;
1364+
1365+
$container->getDefinition('asset_mapper.compiled_asset_mapper_config_reader')
1366+
->setArgument(0, $publicAssetsDirectory);
13631367

13641368
if (!$config['server']) {
13651369
$container->removeDefinition('asset_mapper.dev_server_subscriber');
@@ -3163,11 +3167,12 @@ private function writeConfigEnabled(string $path, bool $value, array &$config):
31633167
$config['enabled'] = $value;
31643168
}
31653169

3166-
private function getPublicDirectoryName(ContainerBuilder $container): string
3170+
private function getPublicDirectory(ContainerBuilder $container): string
31673171
{
3168-
$defaultPublicDir = 'public';
3172+
$projectDir = $container->getParameter('kernel.project_dir');
3173+
$defaultPublicDir = $projectDir.'/public';
31693174

3170-
$composerFilePath = $container->getParameter('kernel.project_dir').'/composer.json';
3175+
$composerFilePath = $projectDir.'/composer.json';
31713176

31723177
if (!file_exists($composerFilePath)) {
31733178
return $defaultPublicDir;
@@ -3176,6 +3181,6 @@ private function getPublicDirectoryName(ContainerBuilder $container): string
31763181
$container->addResource(new FileResource($composerFilePath));
31773182
$composerConfig = json_decode(file_get_contents($composerFilePath), true);
31783183

3179-
return $composerConfig['extra']['public-dir'] ?? $defaultPublicDir;
3184+
return isset($composerConfig['extra']['public-dir']) ? $projectDir.'/'.$composerConfig['extra']['public-dir'] : $defaultPublicDir;
31803185
}
31813186
}

Resources/config/asset_mapper.php

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
use Symfony\Component\AssetMapper\Command\ImportMapRemoveCommand;
2525
use Symfony\Component\AssetMapper\Command\ImportMapRequireCommand;
2626
use Symfony\Component\AssetMapper\Command\ImportMapUpdateCommand;
27+
use Symfony\Component\AssetMapper\CompiledAssetMapperConfigReader;
2728
use Symfony\Component\AssetMapper\Compiler\CssAssetUrlCompiler;
2829
use Symfony\Component\AssetMapper\Compiler\JavaScriptImportPathCompiler;
2930
use Symfony\Component\AssetMapper\Compiler\SourceMappingUrlsCompiler;
@@ -40,6 +41,7 @@
4041
use Symfony\Component\AssetMapper\ImportMap\RemotePackageStorage;
4142
use Symfony\Component\AssetMapper\ImportMap\Resolver\JsDelivrEsmResolver;
4243
use Symfony\Component\AssetMapper\MapperAwareAssetPackage;
44+
use Symfony\Component\AssetMapper\Path\LocalPublicAssetsFilesystem;
4345
use Symfony\Component\AssetMapper\Path\PublicAssetsPathResolver;
4446

4547
return static function (ContainerConfigurator $container) {
@@ -48,7 +50,7 @@
4850
->args([
4951
service('asset_mapper.repository'),
5052
service('asset_mapper.mapped_asset_factory'),
51-
service('asset_mapper.public_assets_path_resolver'),
53+
service('asset_mapper.compiled_asset_mapper_config_reader'),
5254
])
5355
->alias(AssetMapperInterface::class, 'asset_mapper')
5456

@@ -76,9 +78,17 @@
7678

7779
->set('asset_mapper.public_assets_path_resolver', PublicAssetsPathResolver::class)
7880
->args([
79-
param('kernel.project_dir'),
8081
abstract_arg('asset public prefix'),
81-
abstract_arg('public directory name'),
82+
])
83+
84+
->set('asset_mapper.local_public_assets_filesystem', LocalPublicAssetsFilesystem::class)
85+
->args([
86+
abstract_arg('public directory'),
87+
])
88+
89+
->set('asset_mapper.compiled_asset_mapper_config_reader', CompiledAssetMapperConfigReader::class)
90+
->args([
91+
abstract_arg('public assets directory'),
8292
])
8393

8494
->set('asset_mapper.asset_package', MapperAwareAssetPackage::class)
@@ -100,12 +110,11 @@
100110

101111
->set('asset_mapper.command.compile', AssetMapperCompileCommand::class)
102112
->args([
103-
service('asset_mapper.public_assets_path_resolver'),
113+
service('asset_mapper.compiled_asset_mapper_config_reader'),
104114
service('asset_mapper'),
105115
service('asset_mapper.importmap.generator'),
106-
service('filesystem'),
116+
service('asset_mapper.local_public_assets_filesystem'),
107117
param('kernel.project_dir'),
108-
abstract_arg('public directory name'),
109118
param('kernel.debug'),
110119
service('event_dispatcher')->nullOnInvalid(),
111120
])
@@ -163,7 +172,7 @@
163172
->set('asset_mapper.importmap.generator', ImportMapGenerator::class)
164173
->args([
165174
service('asset_mapper'),
166-
service('asset_mapper.public_assets_path_resolver'),
175+
service('asset_mapper.compiled_asset_mapper_config_reader'),
167176
service('asset_mapper.importmap.config_reader'),
168177
])
169178

Tests/DependencyInjection/XmlFrameworkExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public function testAssetMapper()
7979
$container = $this->createContainerFromFile('asset_mapper');
8080

8181
$definition = $container->getDefinition('asset_mapper.public_assets_path_resolver');
82-
$this->assertSame('/assets_path/', $definition->getArgument(1));
82+
$this->assertSame('/assets_path/', $definition->getArgument(0));
8383

8484
$definition = $container->getDefinition('asset_mapper.dev_server_subscriber');
8585
$this->assertSame(['zip' => 'application/zip'], $definition->getArgument(2));

0 commit comments

Comments
 (0)