Viewing file: Bundle.php (5.36 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */
namespace Symfony\Component\HttpKernel\Bundle;
use Symfony\Component\DependencyInjection\ContainerAware; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Container; use Symfony\Component\Console\Application; use Symfony\Component\Finder\Finder; use Symfony\Component\DependencyInjection\Extension\ExtensionInterface;
/** * An implementation of BundleInterface that adds a few conventions * for DependencyInjection extensions and Console commands. * * @author Fabien Potencier <fabien@symfony.com> * * @api */ abstract class Bundle extends ContainerAware implements BundleInterface { protected $name; protected $extension; protected $path;
/** * Boots the Bundle. */ public function boot() { }
/** * Shutdowns the Bundle. */ public function shutdown() { }
/** * Builds the bundle. * * It is only ever called once when the cache is empty. * * This method can be overridden to register compilation passes, * other extensions, ... * * @param ContainerBuilder $container A ContainerBuilder instance */ public function build(ContainerBuilder $container) { }
/** * Returns the bundle's container extension. * * @return ExtensionInterface|null The container extension * * @throws \LogicException * * @api */ public function getContainerExtension() { if (null === $this->extension) { $basename = preg_replace('/Bundle$/', '', $this->getName());
$class = $this->getNamespace().'\\DependencyInjection\\'.$basename.'Extension'; if (class_exists($class)) { $extension = new $class();
// check naming convention $expectedAlias = Container::underscore($basename); if ($expectedAlias != $extension->getAlias()) { throw new \LogicException(sprintf( 'The extension alias for the default extension of a '. 'bundle must be the underscored version of the '. 'bundle name ("%s" instead of "%s")', $expectedAlias, $extension->getAlias() )); }
$this->extension = $extension; } else { $this->extension = false; } }
if ($this->extension) { return $this->extension; } }
/** * Gets the Bundle namespace. * * @return string The Bundle namespace * * @api */ public function getNamespace() { $class = get_class($this);
return substr($class, 0, strrpos($class, '\\')); }
/** * Gets the Bundle directory path. * * @return string The Bundle absolute path * * @api */ public function getPath() { if (null === $this->path) { $reflected = new \ReflectionObject($this); $this->path = dirname($reflected->getFileName()); }
return $this->path; }
/** * Returns the bundle parent name. * * @return string The Bundle parent name it overrides or null if no parent * * @api */ public function getParent() { return null; }
/** * Returns the bundle name (the class short name). * * @return string The Bundle name * * @api */ final public function getName() { if (null !== $this->name) { return $this->name; }
$name = get_class($this); $pos = strrpos($name, '\\');
return $this->name = false === $pos ? $name : substr($name, $pos + 1); }
/** * Finds and registers Commands. * * Override this method if your bundle commands do not follow the conventions: * * * Commands are in the 'Command' sub-directory * * Commands extend Symfony\Component\Console\Command\Command * * @param Application $application An Application instance */ public function registerCommands(Application $application) { if (!is_dir($dir = $this->getPath().'/Command')) { return; }
$finder = new Finder(); $finder->files()->name('*Command.php')->in($dir);
$prefix = $this->getNamespace().'\\Command'; foreach ($finder as $file) { $ns = $prefix; if ($relativePath = $file->getRelativePath()) { $ns .= '\\'.strtr($relativePath, '/', '\\'); } $class = $ns.'\\'.$file->getBasename('.php'); if ($this->container) { $alias = 'console.command.'.strtolower(str_replace('\\', '_', $class)); if ($this->container->has($alias)) { continue; } } $r = new \ReflectionClass($class); if ($r->isSubclassOf('Symfony\\Component\\Console\\Command\\Command') && !$r->isAbstract() && !$r->getConstructor()->getNumberOfRequiredParameters()) { $application->add($r->newInstance()); } } } }
|