twig_tweak-8.x-2.8/src/Command/DebugLoadersCommand.php

src/Command/DebugLoadersCommand.php
<?php

declare(strict_types=1);

namespace Drupal\twig_tweak\Command;

use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Twig\Environment;
use Twig\Loader\ChainLoader;
use Twig\Loader\FilesystemLoader;

#[AsCommand(
  name: 'twig-tweak:debug:loaders',
  description: 'Show a list of Twig loaders',
)]
final class DebugLoadersCommand extends Command {

  /**
   * {@inheritdoc}
   */
  public function __construct(private readonly Environment $twig) {
    parent::__construct();
  }

  /**
   * {@inheritdoc}
   */
  protected function execute(InputInterface $input, OutputInterface $output): int {
    $io = new SymfonyStyle($input, $output);

    $rows = [];
    foreach ($this->getLoaderPaths() as $namespace => $paths) {
      foreach ($paths as $path) {
        $rows[] = [$namespace, $path . \DIRECTORY_SEPARATOR];
      }
    }
    $io->table(['Namespace', 'Path'], $rows);

    return self::SUCCESS;
  }

  /**
   * Gets loader paths.
   */
  private function getLoaderPaths(): array {
    $loader_paths = [];
    foreach ($this->getFilesystemLoaders() as $loader) {
      foreach ($loader->getNamespaces() as $namespace) {
        $paths = $loader->getPaths($namespace);
        $namespace = FilesystemLoader::MAIN_NAMESPACE === $namespace ? '(None)' : '@' . $namespace;
        $loader_paths[$namespace] = \array_merge($loader_paths[$namespace] ?? [], $paths);
      }
    }
    \ksort($loader_paths);
    return $loader_paths;
  }

  /**
   * Returns files system loaders.
   *
   * @return \Twig\Loader\FilesystemLoader[]
   *   File system loaders.
   */
  private function getFilesystemLoaders(): array {
    $loaders = [];
    $loader = $this->twig->getLoader();
    if ($loader instanceof FilesystemLoader) {
      $loaders[] = $loader;
    }
    elseif ($loader instanceof ChainLoader) {
      foreach ($loader->getLoaders() as $chained_loaders) {
        if ($chained_loaders instanceof FilesystemLoader) {
          $loaders[] = $chained_loaders;
        }
      }
    }
    return $loaders;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc