Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

Bundle.php

Zuletzt modifiziert: 09.10.2024, 12:56 - Dateigröße: 6.54 KiB


 001  <?php
 002   
 003  /*
 004   * This file is part of the Symfony package.
 005   *
 006   * (c) Fabien Potencier <fabien@symfony.com>
 007   *
 008   * For the full copyright and license information, please view the LICENSE
 009   * file that was distributed with this source code.
 010   */
 011   
 012  namespace Symfony\Component\HttpKernel\Bundle;
 013   
 014  use Symfony\Component\DependencyInjection\ContainerInterface;
 015  use Symfony\Component\DependencyInjection\ContainerBuilder;
 016  use Symfony\Component\DependencyInjection\Container;
 017  use Symfony\Component\Console\Application;
 018  use Symfony\Component\Finder\Finder;
 019  use Symfony\Component\DependencyInjection\Extension\ExtensionInterface;
 020   
 021  /**
 022   * An implementation of BundleInterface that adds a few conventions
 023   * for DependencyInjection extensions and Console commands.
 024   *
 025   * @author Fabien Potencier <fabien@symfony.com>
 026   */
 027  abstract class Bundle implements BundleInterface
 028  {
 029      /**
 030       * @var ContainerInterface
 031       */
 032      protected $container;
 033      protected $name;
 034      protected $extension;
 035      protected $path;
 036   
 037      /**
 038       * Boots the Bundle.
 039       */
 040      public function boot()
 041      {
 042      }
 043   
 044      /**
 045       * Shutdowns the Bundle.
 046       */
 047      public function shutdown()
 048      {
 049      }
 050   
 051      /**
 052       * Builds the bundle.
 053       *
 054       * It is only ever called once when the cache is empty.
 055       *
 056       * This method can be overridden to register compilation passes,
 057       * other extensions, ...
 058       *
 059       * @param ContainerBuilder $container A ContainerBuilder instance
 060       */
 061      public function build(ContainerBuilder $container)
 062      {
 063      }
 064   
 065      /**
 066       * Sets the container.
 067       *
 068       * @param ContainerInterface|null $container A ContainerInterface instance or null
 069       */
 070      public function setContainer(ContainerInterface $container = null)
 071      {
 072          $this->container = $container;
 073      }
 074   
 075      /**
 076       * Returns the bundle's container extension.
 077       *
 078       * @return ExtensionInterface|null The container extension
 079       *
 080       * @throws \LogicException
 081       */
 082      public function getContainerExtension()
 083      {
 084          if (null === $this->extension) {
 085              $extension = $this->createContainerExtension();
 086   
 087              if (null !== $extension) {
 088                  if (!$extension instanceof ExtensionInterface) {
 089                      throw new \LogicException(sprintf('Extension %s must implement Symfony\Component\DependencyInjection\Extension\ExtensionInterface.', get_class($extension)));
 090                  }
 091   
 092                  // check naming convention
 093                  $basename = preg_replace('/Bundle$/', '', $this->getName());
 094                  $expectedAlias = Container::underscore($basename);
 095   
 096                  if ($expectedAlias != $extension->getAlias()) {
 097                      throw new \LogicException(sprintf(
 098                          'Users will expect the alias of the default extension of a bundle to be the underscored version of the bundle name ("%s"). You can override "Bundle::getContainerExtension()" if you want to use "%s" or another alias.',
 099                          $expectedAlias, $extension->getAlias()
 100                      ));
 101                  }
 102   
 103                  $this->extension = $extension;
 104              } else {
 105                  $this->extension = false;
 106              }
 107          }
 108   
 109          if ($this->extension) {
 110              return $this->extension;
 111          }
 112      }
 113   
 114      /**
 115       * Gets the Bundle namespace.
 116       *
 117       * @return string The Bundle namespace
 118       */
 119      public function getNamespace()
 120      {
 121          $class = get_class($this);
 122   
 123          return substr($class, 0, strrpos($class, '\\'));
 124      }
 125   
 126      /**
 127       * Gets the Bundle directory path.
 128       *
 129       * @return string The Bundle absolute path
 130       */
 131      public function getPath()
 132      {
 133          if (null === $this->path) {
 134              $reflected = new \ReflectionObject($this);
 135              $this->path = dirname($reflected->getFileName());
 136          }
 137   
 138          return $this->path;
 139      }
 140   
 141      /**
 142       * Returns the bundle parent name.
 143       *
 144       * @return string The Bundle parent name it overrides or null if no parent
 145       */
 146      public function getParent()
 147      {
 148      }
 149   
 150      /**
 151       * Returns the bundle name (the class short name).
 152       *
 153       * @return string The Bundle name
 154       */
 155      final public function getName()
 156      {
 157          if (null !== $this->name) {
 158              return $this->name;
 159          }
 160   
 161          $name = get_class($this);
 162          $pos = strrpos($name, '\\');
 163   
 164          return $this->name = false === $pos ? $name : substr($name, $pos + 1);
 165      }
 166   
 167      /**
 168       * Finds and registers Commands.
 169       *
 170       * Override this method if your bundle commands do not follow the conventions:
 171       *
 172       * * Commands are in the 'Command' sub-directory
 173       * * Commands extend Symfony\Component\Console\Command\Command
 174       *
 175       * @param Application $application An Application instance
 176       */
 177      public function registerCommands(Application $application)
 178      {
 179          if (!is_dir($dir = $this->getPath().'/Command')) {
 180              return;
 181          }
 182   
 183          if (!class_exists('Symfony\Component\Finder\Finder')) {
 184              throw new \RuntimeException('You need the symfony/finder component to register bundle commands.');
 185          }
 186   
 187          $finder = new Finder();
 188          $finder->files()->name('*Command.php')->in($dir);
 189   
 190          $prefix = $this->getNamespace().'\\Command';
 191          foreach ($finder as $file) {
 192              $ns = $prefix;
 193              if ($relativePath = $file->getRelativePath()) {
 194                  $ns .= '\\'.str_replace('/', '\\', $relativePath);
 195              }
 196              $class = $ns.'\\'.$file->getBasename('.php');
 197              if ($this->container) {
 198                  $alias = 'console.command.'.strtolower(str_replace('\\', '_', $class));
 199                  if ($this->container->has($alias)) {
 200                      continue;
 201                  }
 202              }
 203              $r = new \ReflectionClass($class);
 204              if ($r->isSubclassOf('Symfony\\Component\\Console\\Command\\Command') && !$r->isAbstract() && !$r->getConstructor()->getNumberOfRequiredParameters()) {
 205                  $application->add($r->newInstance());
 206              }
 207          }
 208      }
 209   
 210      /**
 211       * Returns the bundle's container extension class.
 212       *
 213       * @return string
 214       */
 215      protected function getContainerExtensionClass()
 216      {
 217          $basename = preg_replace('/Bundle$/', '', $this->getName());
 218   
 219          return $this->getNamespace().'\\DependencyInjection\\'.$basename.'Extension';
 220      }
 221   
 222      /**
 223       * Creates the bundle's container extension.
 224       *
 225       * @return ExtensionInterface|null
 226       */
 227      protected function createContainerExtension()
 228      {
 229          if (class_exists($class = $this->getContainerExtensionClass())) {
 230              return new $class();
 231          }
 232      }
 233  }
 234