You are here

abstract class AbstractLoader in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/validator/Mapping/Loader/AbstractLoader.php \Symfony\Component\Validator\Mapping\Loader\AbstractLoader

Base loader for validation metadata.

This loader supports the loading of constraints from Symfony's default namespace (see {@link DEFAULT_NAMESPACE}) using the short class names of those constraints. Constraints can also be loaded using their fully qualified class names. At last, namespace aliases can be defined to load constraints with the syntax "alias:ShortName".

@author Bernhard Schussek <bschussek@gmail.com>

Hierarchy

Expanded class hierarchy of AbstractLoader

File

vendor/symfony/validator/Mapping/Loader/AbstractLoader.php, line 28

Namespace

Symfony\Component\Validator\Mapping\Loader
View source
abstract class AbstractLoader implements LoaderInterface {

  /**
   * The namespace to load constraints from by default.
   */
  const DEFAULT_NAMESPACE = '\\Symfony\\Component\\Validator\\Constraints\\';

  /**
   * @var array
   */
  protected $namespaces = array();

  /**
   * Adds a namespace alias.
   *
   * The namespace alias can be used to reference constraints from specific
   * namespaces in {@link newConstraint()}:
   *
   *     $this->addNamespaceAlias('mynamespace', '\\Acme\\Package\\Constraints\\');
   *
   *     $constraint = $this->newConstraint('mynamespace:NotNull');
   *
   * @param string $alias     The alias
   * @param string $namespace The PHP namespace
   */
  protected function addNamespaceAlias($alias, $namespace) {
    $this->namespaces[$alias] = $namespace;
  }

  /**
   * Creates a new constraint instance for the given constraint name.
   *
   * @param string $name    The constraint name. Either a constraint relative
   *                        to the default constraint namespace, or a fully
   *                        qualified class name. Alternatively, the constraint
   *                        may be preceded by a namespace alias and a colon.
   *                        The namespace alias must have been defined using
   *                        {@link addNamespaceAlias()}.
   * @param mixed  $options The constraint options
   *
   * @return Constraint
   *
   * @throws MappingException If the namespace prefix is undefined
   */
  protected function newConstraint($name, $options = null) {
    if (strpos($name, '\\') !== false && class_exists($name)) {
      $className = (string) $name;
    }
    elseif (strpos($name, ':') !== false) {
      list($prefix, $className) = explode(':', $name, 2);
      if (!isset($this->namespaces[$prefix])) {
        throw new MappingException(sprintf('Undefined namespace prefix "%s"', $prefix));
      }
      $className = $this->namespaces[$prefix] . $className;
    }
    else {
      $className = self::DEFAULT_NAMESPACE . $name;
    }
    return new $className($options);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
AbstractLoader::$namespaces protected property
AbstractLoader::addNamespaceAlias protected function Adds a namespace alias.
AbstractLoader::DEFAULT_NAMESPACE constant The namespace to load constraints from by default.
AbstractLoader::newConstraint protected function Creates a new constraint instance for the given constraint name.
LoaderInterface::loadClassMetadata public function Loads validation metadata into a {@link ClassMetadata} instance. 10