8000 fixed public directory of web server and assets install when configur… · symfony/symfony@c45062b · GitHub
[go: up one dir, main page]

Skip to content

Commit c45062b

Browse files
fixed public directory of web server and assets install when configured in composer.json
1 parent fc8dc91 commit c45062b

File tree

4 files changed

+67
-1
lines changed

4 files changed

+67
-1
lines changed

src/Symfony/Bundle/FrameworkBundle/Command/AssetsInstallCommand.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\Console\Input\InputOption;
1818
use Symfony\Component\Console\Output\OutputInterface;
1919
use Symfony\Component\Console\Style\SymfonyStyle;
20+
use Symfony\Component\DependencyInjection\ContainerInterface;
2021
use Symfony\Component\Filesystem\Exception\IOException;
2122
use Symfony\Component\Filesystem\Filesystem;
2223
use Symfony\Component\Finder\Finder;
@@ -65,7 +66,7 @@ protected function configure()
6566
{
6667
$this
6768
->setDefinition(array(
68-
new InputArgument('target', InputArgument::OPTIONAL, 'The target directory', 'public'),
69+
new InputArgument('target', InputArgument::OPTIONAL, 'The target directory', null),
6970
))
7071
->addOption('symlink', null, InputOption::VALUE_NONE, 'Symlinks the assets instead of copying it')
7172
->addOption('relative', null, InputOption::VALUE_NONE, 'Make relative symlinks')
@@ -107,6 +108,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
107108
$kernel = $this->getApplication()->getKernel();
108109
$targetArg = rtrim($input->getArgument('target'), '/');
109110

111+
if (!$targetArg) {
112+
$targetArg = $this->getPublicDirectory($this->getContainer());
113+
}
114+
110115
if (!is_dir($targetArg)) {
111116
$targetArg = (isset($baseDir) ? $baseDir : $kernel->getContainer()->getParameter('kernel.project_dir')).'/'.$targetArg;
112117

@@ -288,4 +293,27 @@ private function hardCopy($originDir, $targetDir)
288293

289294
return self::METHOD_COPY;
290295
}
296+
297+
private function getPublicDirectory(ContainerInterface $container)
298+
{
299+
$defaultPublicDir = 'public';
300+
301+
if (!$container->hasParameter('kernel.project_dir')) {
302+
return $defaultPublicDir;
303+
}
304+
305+
$composerFilePath = $container->getParameter('kernel.project_dir').'/composer.json';
306+
307+
if (!file_exists($composerFilePath)) {
308+
return $defaultPublicDir;
309+
}
310+
311+
$composerConfig = json_decode(file_get_contents($composerFilePath), true);
312+
313+
if (isset($composerConfig['extra']['public-dir'])) {
314+
return $composerConfig['extra']['public-dir'];
315+
}
316+
317+
return $defaultPublicDir;
318+
}
291319
}

src/Symfony/Bundle/WebServerBundle/DependencyInjection/WebServerExtension.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,31 @@ public function load(array $configs, ContainerBuilder $container)
2727
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
2828
$loader->load('webserver.xml');
2929

30+
$publicDirectory = $this->getPublicDirectory($container);
31+
$container->getDefinition('web_server.command.server_run')->replaceArgument(0, $publicDirectory);
32+
$container->getDefinition('web_server.command.server_start')->replaceArgument(0, $publicDirectory);
33+
3034
if (!class_exists(ConsoleFormatter::class)) {
3135
$container->removeDefinition('web_server.command.server_log');
3236
}
3337
}
38+
39+
private function getPublicDirectory(ContainerBuilder $container)
40+
{
41+
$kernelProjectDir = $container->getParameter('kernel.project_dir');
42+
$publicDir = 'public';
43+
$composerFilePath = $kernelProjectDir.'/composer.json';
44+
45+
if (!file_exists($composerFilePath)) {
46+
return $kernelProjectDir.'/'.$publicDir;
47+
}
48+
49+
$composerConfig = json_decode(file_get_contents($composerFilePath), true);
50+
51+
if (isset($composerConfig['extra']['public-dir'])) {
52+
$publicDir = $composerConfig['extra']['public-dir'];
53+
}
54+
55+
return $kernelProjectDir.'/'.$publicDir;
56+
}
3457
}

src/Symfony/Bundle/WebServerBundle/Tests/DependencyInjection/WebServerExtensionTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,17 @@ class WebServerExtensionTest extends TestCase
2121
public function testLoad()
2222
{
2323
$container = new ContainerBuilder();
24+
$container->setParameter('kernel.project_dir', __DIR__);
2425
(new WebServerExtension())->load(array(), $container);
2526

27+
$this->assertSame(
28+
__DIR__.'/test',
29+
$container->getDefinition('web_server.command.server_run')->getArgument(0)
30+
);
31+
$this->assertSame(
32+
__DIR__.'/test',
33+
$container->getDefinition('web_server.command.server_start')->getArgument(0)
34+
);
2635
$this->assertTrue($container->hasDefinition('web_server.command.server_run'));
2736
$this->assertTrue($container->hasDefinition('web_server.command.server_start'));
2837
$this->assertTrue($container->hasDefinition('web_server.command.server_stop'));
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "test-composer.json",
3+
"extra": {
4+
"public-dir": "test"
5+
}
6+
}

0 commit comments

Comments
 (0)
0