| Viewing file:  AbstractExtension.php (4.77 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\Form;
 
 use Symfony\Component\Form\Exception\InvalidArgumentException;
 use Symfony\Component\Form\Exception\UnexpectedTypeException;
 
 /**
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
 abstract class AbstractExtension implements FormExtensionInterface
 {
 /**
 * The types provided by this extension
 * @var FormTypeInterface[] An array of FormTypeInterface
 */
 private $types;
 
 /**
 * The type extensions provided by this extension
 * @var FormTypeExtensionInterface[] An array of FormTypeExtensionInterface
 */
 private $typeExtensions;
 
 /**
 * The type guesser provided by this extension
 * @var FormTypeGuesserInterface
 */
 private $typeGuesser;
 
 /**
 * Whether the type guesser has been loaded
 * @var Boolean
 */
 private $typeGuesserLoaded = false;
 
 /**
 * {@inheritdoc}
 */
 public function getType($name)
 {
 if (null === $this->types) {
 $this->initTypes();
 }
 
 if (!isset($this->types[$name])) {
 throw new InvalidArgumentException(sprintf('The type "%s" can not be loaded by this extension', $name));
 }
 
 return $this->types[$name];
 }
 
 /**
 * {@inheritdoc}
 */
 public function hasType($name)
 {
 if (null === $this->types) {
 $this->initTypes();
 }
 
 return isset($this->types[$name]);
 }
 
 /**
 * {@inheritdoc}
 */
 public function getTypeExtensions($name)
 {
 if (null === $this->typeExtensions) {
 $this->initTypeExtensions();
 }
 
 return isset($this->typeExtensions[$name])
 ? $this->typeExtensions[$name]
 : array();
 }
 
 /**
 * {@inheritdoc}
 */
 public function hasTypeExtensions($name)
 {
 if (null === $this->typeExtensions) {
 $this->initTypeExtensions();
 }
 
 return isset($this->typeExtensions[$name]) && count($this->typeExtensions[$name]) > 0;
 }
 
 /**
 * {@inheritdoc}
 */
 public function getTypeGuesser()
 {
 if (!$this->typeGuesserLoaded) {
 $this->initTypeGuesser();
 }
 
 return $this->typeGuesser;
 }
 
 /**
 * Registers the types.
 *
 * @return FormTypeInterface[] An array of FormTypeInterface instances
 */
 protected function loadTypes()
 {
 return array();
 }
 
 /**
 * Registers the type extensions.
 *
 * @return FormTypeExtensionInterface[] An array of FormTypeExtensionInterface instances
 */
 protected function loadTypeExtensions()
 {
 return array();
 }
 
 /**
 * Registers the type guesser.
 *
 * @return FormTypeGuesserInterface|null A type guesser
 */
 protected function loadTypeGuesser()
 {
 return null;
 }
 
 /**
 * Initializes the types.
 *
 * @throws UnexpectedTypeException if any registered type is not an instance of FormTypeInterface
 */
 private function initTypes()
 {
 $this->types = array();
 
 foreach ($this->loadTypes() as $type) {
 if (!$type instanceof FormTypeInterface) {
 throw new UnexpectedTypeException($type, 'Symfony\Component\Form\FormTypeInterface');
 }
 
 $this->types[$type->getName()] = $type;
 }
 }
 
 /**
 * Initializes the type extensions.
 *
 * @throws UnexpectedTypeException if any registered type extension is not
 *                                 an instance of FormTypeExtensionInterface
 */
 private function initTypeExtensions()
 {
 $this->typeExtensions = array();
 
 foreach ($this->loadTypeExtensions() as $extension) {
 if (!$extension instanceof FormTypeExtensionInterface) {
 throw new UnexpectedTypeException($extension, 'Symfony\Component\Form\FormTypeExtensionInterface');
 }
 
 $type = $extension->getExtendedType();
 
 $this->typeExtensions[$type][] = $extension;
 }
 }
 
 /**
 * Initializes the type guesser.
 *
 * @throws UnexpectedTypeException if the type guesser is not an instance of FormTypeGuesserInterface
 */
 private function initTypeGuesser()
 {
 $this->typeGuesserLoaded = true;
 
 $this->typeGuesser = $this->loadTypeGuesser();
 if (null !== $this->typeGuesser && !$this->typeGuesser instanceof FormTypeGuesserInterface) {
 throw new UnexpectedTypeException($this->typeGuesser, 'Symfony\Component\Form\FormTypeGuesserInterface');
 }
 }
 }
 
 |