vendor/netzmacht/contao-toolkit/src/Dca/Manager.php line 74

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Netzmacht\Contao\Toolkit\Dca;
  4. use Netzmacht\Contao\Toolkit\Assertion\Assertion;
  5. use Netzmacht\Contao\Toolkit\Dca\Formatter\Formatter;
  6. use Netzmacht\Contao\Toolkit\Dca\Formatter\FormatterFactory;
  7. /**
  8.  * Data container definition manager.
  9.  */
  10. final class Manager implements DcaManager
  11. {
  12.     /**
  13.      * Data definition cache.
  14.      *
  15.      * @var Definition[]
  16.      */
  17.     private $definitions = [];
  18.     /**
  19.      * Data definition formatter cache.
  20.      *
  21.      * @var Formatter[]
  22.      */
  23.     private $formatter = [];
  24.     /**
  25.      * The data definition array loader.
  26.      *
  27.      * @var DcaLoader
  28.      */
  29.     private $loader;
  30.     /**
  31.      * FormatterFactory.
  32.      *
  33.      * @var FormatterFactory
  34.      */
  35.     private $formatterFactory;
  36.     /**
  37.      * @param DcaLoader        $loader           The data definition array loader.
  38.      * @param FormatterFactory $formatterFactory Formatter factory.
  39.      */
  40.     public function __construct(DcaLoader $loaderFormatterFactory $formatterFactory)
  41.     {
  42.         $this->loader           $loader;
  43.         $this->formatterFactory $formatterFactory;
  44.     }
  45.     /**
  46.      * Get a data container definition.
  47.      *
  48.      * @param string $name    The data definition name.
  49.      * @param bool   $noCache If true not the cached version is loaded.
  50.      *
  51.      * @SuppressWarnings(PHPMD.Superglobals)
  52.      */
  53.     public function getDefinition(string $namebool $noCache false): Definition
  54.     {
  55.         if ($noCache) {
  56.             $this->loader->loadLanguageFile($namenull$noCache);
  57.             $this->loader->loadDataContainer($name$noCache);
  58.             $this->assertValidDca($name);
  59.             return new Definition($name$GLOBALS['TL_DCA'][$name]);
  60.         }
  61.         if (! isset($this->definitions[$name])) {
  62.             $this->loader->loadLanguageFile($name);
  63.             $this->loader->loadDataContainer($name);
  64.             $this->assertValidDca($name);
  65.             $this->definitions[$name] = new Definition($name$GLOBALS['TL_DCA'][$name]);
  66.         }
  67.         return $this->definitions[$name];
  68.     }
  69.     /**
  70.      * Get a formatter for a definition.
  71.      *
  72.      * @param string $name Definition or name.
  73.      */
  74.     public function getFormatter(string $name): Formatter
  75.     {
  76.         if (! isset($this->formatter[$name])) {
  77.             $definition             $this->getDefinition($name);
  78.             $this->formatter[$name] = $this->formatterFactory->createFormatterFor($definition);
  79.         }
  80.         return $this->formatter[$name];
  81.     }
  82.     /**
  83.      * Assert that a valid dca is loaded.
  84.      *
  85.      * @param string $name Dca name.
  86.      *
  87.      * @SuppressWarnings(PHPMD.Superglobals)
  88.      */
  89.     protected function assertValidDca(string $name): void
  90.     {
  91.         Assertion::keyExists($GLOBALS['TL_DCA'], $name);
  92.         Assertion::isArray($GLOBALS['TL_DCA'][$name]);
  93.     }
  94. }