Skip to content

Commit

Permalink
fixed public directory of web server and assets install when configur…
Browse files Browse the repository at this point in the history
…ed in composer.json
  • Loading branch information
alexander-schranz committed Dec 12, 2018
1 parent fc8dc91 commit 3654c68
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 1 deletion.
Expand Up @@ -17,6 +17,7 @@
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Filesystem\Exception\IOException;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Finder\Finder;
Expand Down Expand Up @@ -65,7 +66,7 @@ protected function configure()
{
$this
->setDefinition(array(
new InputArgument('target', InputArgument::OPTIONAL, 'The target directory', 'public'),
new InputArgument('target', InputArgument::OPTIONAL, 'The target directory', null),
))
->addOption('symlink', null, InputOption::VALUE_NONE, 'Symlinks the assets instead of copying it')
->addOption('relative', null, InputOption::VALUE_NONE, 'Make relative symlinks')
Expand Down Expand Up @@ -107,6 +108,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
$kernel = $this->getApplication()->getKernel();
$targetArg = rtrim($input->getArgument('target'), '/');

if (!$targetArg) {
$targetArg = $this->getPublicDirectory($this->getContainer());
}

if (!is_dir($targetArg)) {
$targetArg = (isset($baseDir) ? $baseDir : $kernel->getContainer()->getParameter('kernel.project_dir')).'/'.$targetArg;

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

return self::METHOD_COPY;
}

private function getPublicDirectory(ContainerInterface $container)
{
$defaultPublicDir = 'public';

if (!$container->hasParameter('kernel.project_dir')) {
return $defaultPublicDir;
}

$composerFilePath = $container->getParameter('kernel.project_dir').'/composer.json';

if (!file_exists($composerFilePath)) {
return $defaultPublicDir;
}

$composerConfig = json_decode(file_get_contents($composerFilePath), true);

if (isset($composerConfig['extra']['public-dir'])) {
return $composerConfig['extra']['public-dir'];
}

return $defaultPublicDir;
}
}
Expand Up @@ -27,8 +27,31 @@ public function load(array $configs, ContainerBuilder $container)
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('webserver.xml');

$publicDirectory = $this->getPublicDirectory($container);
$container->getDefinition('web_server.command.server_run')->replaceArgument(0, $publicDirectory);
$container->getDefinition('web_server.command.server_start')->replaceArgument(0, $publicDirectory);

if (!class_exists(ConsoleFormatter::class)) {
$container->removeDefinition('web_server.command.server_log');
}
}

private function getPublicDirectory(ContainerBuilder $container)
{
$kernelProjectDir = $container->getParameter('kernel.project_dir');
$publicDir = 'public';
$composerFilePath = $kernelProjectDir.'/composer.json';

if (!file_exists($composerFilePath)) {
return $kernelProjectDir.'/'.$publicDir;
}

$composerConfig = json_decode(file_get_contents($composerFilePath), true);

if (isset($composerConfig['extra']['public-dir'])) {
$publicDir = $composerConfig['extra']['public-dir'];
}

return $kernelProjectDir.'/'.$publicDir;
}
}
Expand Up @@ -21,6 +21,7 @@ class WebServerExtensionTest extends TestCase
public function testLoad()
{
$container = new ContainerBuilder();
$container->setParameter('kernel.project_dir', __DIR__);
(new WebServerExtension())->load(array(), $container);

$this->assertTrue($container->hasDefinition('web_server.command.server_run'));
Expand Down

0 comments on commit 3654c68

Please sign in to comment.