name: AssetsInstallCommand class_comment: null dependencies: - name: AsCommand type: class source: Symfony\Component\Console\Attribute\AsCommand - name: Command type: class source: Symfony\Component\Console\Command\Command - name: InvalidArgumentException type: class source: Symfony\Component\Console\Exception\InvalidArgumentException - name: InputArgument type: class source: Symfony\Component\Console\Input\InputArgument - name: InputInterface type: class source: Symfony\Component\Console\Input\InputInterface - name: InputOption type: class source: Symfony\Component\Console\Input\InputOption - name: OutputInterface type: class source: Symfony\Component\Console\Output\OutputInterface - name: SymfonyStyle type: class source: Symfony\Component\Console\Style\SymfonyStyle - name: ContainerInterface type: class source: Symfony\Component\DependencyInjection\ContainerInterface - name: IOException type: class source: Symfony\Component\Filesystem\Exception\IOException - name: Filesystem type: class source: Symfony\Component\Filesystem\Filesystem - name: Finder type: class source: Symfony\Component\Finder\Finder - name: BundleInterface type: class source: Symfony\Component\HttpKernel\Bundle\BundleInterface - name: KernelInterface type: class source: Symfony\Component\HttpKernel\KernelInterface properties: [] methods: - name: relativeSymlinkWithFallback visibility: private parameters: - name: originDir - name: targetDir comment: "# * Command that places bundle web assets into a given directory.\n# *\n\ # * @author Fabien Potencier \n# * @author G\xE1bor Egyed\ \ \n# *\n# * @final\n# */\n# #[AsCommand(name: 'assets:install',\ \ description: 'Install bundle\\'s web assets under a public directory')]\n# class\ \ AssetsInstallCommand extends Command\n# {\n# public const METHOD_COPY = 'copy';\n\ # public const METHOD_ABSOLUTE_SYMLINK = 'absolute symlink';\n# public const METHOD_RELATIVE_SYMLINK\ \ = 'relative symlink';\n# \n# public function __construct(\n# private Filesystem\ \ $filesystem,\n# private string $projectDir,\n# ) {\n# parent::__construct();\n\ # }\n# \n# protected function configure(): void\n# {\n# $this\n# ->setDefinition([\n\ # new InputArgument('target', InputArgument::OPTIONAL, 'The target directory',\ \ null),\n# ])\n# ->addOption('symlink', null, InputOption::VALUE_NONE, 'Symlink\ \ the assets instead of copying them')\n# ->addOption('relative', null, InputOption::VALUE_NONE,\ \ 'Make relative symlinks')\n# ->addOption('no-cleanup', null, InputOption::VALUE_NONE,\ \ 'Do not remove the assets of the bundles that no longer exist')\n# ->setHelp(<<<'EOT'\n\ # The %command.name% command installs bundle assets into a given\n\ # directory (e.g. the public directory).\n# \n# php %command.full_name%\ \ public\n# \n# A \"bundles\" directory will be created inside the target\ \ directory and the\n# \"Resources/public\" directory of each bundle will be copied\ \ into it.\n# \n# To create a symlink to each bundle instead of copying its assets,\ \ use the\n# --symlink option (will fall back to hard copies when\ \ symbolic links aren't possible:\n# \n# php %command.full_name% public\ \ --symlink\n# \n# To make symlink relative, add the --relative\ \ option:\n# \n# php %command.full_name% public --symlink --relative\n\ # \n# EOT\n# )\n# ;\n# }\n# \n# protected function execute(InputInterface $input,\ \ OutputInterface $output): int\n# {\n# /** @var KernelInterface $kernel */\n\ # $kernel = $this->getApplication()->getKernel();\n# $targetArg = rtrim($input->getArgument('target')\ \ ?? '', '/');\n# if (!$targetArg) {\n# $targetArg = $this->getPublicDirectory($kernel->getContainer());\n\ # }\n# \n# if (!is_dir($targetArg)) {\n# $targetArg = $kernel->getProjectDir().'/'.$targetArg;\n\ # \n# if (!is_dir($targetArg)) {\n# throw new InvalidArgumentException(\\sprintf('The\ \ target directory \"%s\" does not exist.', $targetArg));\n# }\n# }\n# \n# $bundlesDir\ \ = $targetArg.'/bundles/';\n# \n# $io = new SymfonyStyle($input, $output);\n\ # $io->newLine();\n# \n# if ($input->getOption('relative')) {\n# $expectedMethod\ \ = self::METHOD_RELATIVE_SYMLINK;\n# $io->text('Trying to install assets as relative\ \ symbolic links.');\n# } elseif ($input->getOption('symlink')) {\n# $expectedMethod\ \ = self::METHOD_ABSOLUTE_SYMLINK;\n# $io->text('Trying to install assets as absolute\ \ symbolic links.');\n# } else {\n# $expectedMethod = self::METHOD_COPY;\n\ # $io->text('Installing assets as hard copies.');\n# }\n# \n# $io->newLine();\n\ # \n# $rows = [];\n# $copyUsed = false;\n# $exitCode = 0;\n# $validAssetDirs =\ \ [];\n# /** @var BundleInterface $bundle */\n# foreach ($kernel->getBundles()\ \ as $bundle) {\n# if (!is_dir($originDir = $bundle->getPath().'/Resources/public')\ \ && !is_dir($originDir = $bundle->getPath().'/public')) {\n# continue;\n# }\n\ # \n# $assetDir = preg_replace('/bundle$/', '', strtolower($bundle->getName()));\n\ # $targetDir = $bundlesDir.$assetDir;\n# $validAssetDirs[] = $assetDir;\n# \n\ # if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {\n# $message\ \ = \\sprintf(\"%s\\n-> %s\", $bundle->getName(), $targetDir);\n# } else {\n#\ \ $message = $bundle->getName();\n# }\n# \n# try {\n# $this->filesystem->remove($targetDir);\n\ # \n# if (self::METHOD_RELATIVE_SYMLINK === $expectedMethod) {\n# $method = $this->relativeSymlinkWithFallback($originDir,\ \ $targetDir);\n# } elseif (self::METHOD_ABSOLUTE_SYMLINK === $expectedMethod)\ \ {\n# $method = $this->absoluteSymlinkWithFallback($originDir, $targetDir);\n\ # } else {\n# $method = $this->hardCopy($originDir, $targetDir);\n# }\n# \n# if\ \ (self::METHOD_COPY === $method) {\n# $copyUsed = true;\n# }\n# \n# if ($method\ \ === $expectedMethod) {\n# $rows[] = [\\sprintf('%s',\ \ '\\\\' === \\DIRECTORY_SEPARATOR ? 'OK' : \"\\xE2\\x9C\\x94\" /* HEAVY CHECK\ \ MARK (U+2714) */), $message, $method];\n# } else {\n# $rows[] = [\\sprintf('%s',\ \ '\\\\' === \\DIRECTORY_SEPARATOR ? 'WARNING' : '!'), $message, $method];\n#\ \ }\n# } catch (\\Exception $e) {\n# $exitCode = 1;\n# $rows[] = [\\sprintf('%s',\ \ '\\\\' === \\DIRECTORY_SEPARATOR ? 'ERROR' : \"\\xE2\\x9C\\x98\" /* HEAVY BALLOT\ \ X (U+2718) */), $message, $e->getMessage()];\n# }\n# }\n# // remove the assets\ \ of the bundles that no longer exist\n# if (!$input->getOption('no-cleanup')\ \ && is_dir($bundlesDir)) {\n# $dirsToRemove = Finder::create()->depth(0)->directories()->exclude($validAssetDirs)->in($bundlesDir);\n\ # $this->filesystem->remove($dirsToRemove);\n# }\n# \n# if ($rows) {\n# $io->table(['',\ \ 'Bundle', 'Method / Error'], $rows);\n# }\n# \n# if (0 !== $exitCode) {\n# $io->error('Some\ \ errors occurred while installing assets.');\n# } else {\n# if ($copyUsed) {\n\ # $io->note('Some assets were installed via copy. If you make changes to these\ \ assets you have to run this command again.');\n# }\n# $io->success($rows ? 'All\ \ assets were successfully installed.' : 'No assets were provided by any bundle.');\n\ # }\n# \n# return $exitCode;\n# }\n# \n# /**\n# * Try to create relative symlink.\n\ # *\n# * Falling back to absolute symlink and finally hard copy." - name: absoluteSymlinkWithFallback visibility: private parameters: - name: originDir - name: targetDir comment: '# * Try to create absolute symlink. # * # * Falling back to hard copy.' - name: symlink visibility: private parameters: - name: originDir - name: targetDir - name: relative default: 'false' comment: '# * Creates symbolic link. # * # * @throws IOException if link cannot be created' - name: hardCopy visibility: private parameters: - name: originDir - name: targetDir comment: '# * Copies origin to target.' - name: getPublicDirectory visibility: private parameters: - name: container comment: null traits: - Symfony\Component\Console\Attribute\AsCommand - Symfony\Component\Console\Command\Command - Symfony\Component\Console\Exception\InvalidArgumentException - Symfony\Component\Console\Input\InputArgument - Symfony\Component\Console\Input\InputInterface - Symfony\Component\Console\Input\InputOption - Symfony\Component\Console\Output\OutputInterface - Symfony\Component\Console\Style\SymfonyStyle - Symfony\Component\DependencyInjection\ContainerInterface - Symfony\Component\Filesystem\Exception\IOException - Symfony\Component\Filesystem\Filesystem - Symfony\Component\Finder\Finder - Symfony\Component\HttpKernel\Bundle\BundleInterface - Symfony\Component\HttpKernel\KernelInterface interfaces: []