setName('view:link') ->setDescription('Linking of views.') ->addArgument('view', InputArgument::OPTIONAL, 'View file to be linked.'); } public function execute(InputInterface $input, OutputInterface $output): int { $views = []; $view = $input->getArgument('view'); if ($view !== null) { $views[] = $view; } else { $folder = ROOT . '/views'; $folderLength = strlen($folder) + 1; $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST); foreach ($iterator as $file) { if ($file->isDir() || $file->getExtension() !== 'php') { continue; } $view = substr($file->getPath(), $folderLength) . '/' . $file->getBasename('.php'); if (strpos($view, 'templates') === 0 || strpos($view, 'tests') === 0) { continue; } $views[] = $view; } } try { foreach ($views as $view) { $generator = new Linker($view); $generator->generate(); } } catch (\Exception $e) { $output->writeln('Linking view(s) failed!'); $output->writeln(''); $output->writeln((string) $e); $output->writeln(''); return 1; } $output->writeln('View(s) successfully linked!'); return 0; } }