. */ namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Cache\ArrayCache, Doctrine\Common\Annotations\AnnotationReader, Doctrine\DBAL\Schema\AbstractSchemaManager, Doctrine\ORM\Mapping\ClassMetadataInfo, Doctrine\ORM\Mapping\MappingException, Doctrine\Common\Util\Inflector; /** * The PhpDriver includes php files which just populate ClassMetadataInfo * instances with plain php code * * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.doctrine-project.org * @since 2.0 * @version $Revision$ * @author Benjamin Eberlei * @author Guilherme Blanco * @author Jonathan H. Wage * @author Roman Borschel */ class PhpDriver implements Driver { /** * @var array The array of class names found and the path to the file */ private $_classPaths = array(); /** * The paths where to look for mapping files. * * @var array */ protected $_paths = array(); /** * The file extension of mapping documents. * * @var string */ protected $_fileExtension = '.php'; /** * Initializes a new PhpDriver that looks in the given path(s) for mapping * documents and operates in the specified operating mode. * * @param string|array $paths One or multiple paths where mapping documents can be found. */ public function __construct($paths) { $this->addPaths((array) $paths); } /** * Append lookup paths to metadata driver. * * @param array $paths */ public function addPaths(array $paths) { $this->_paths = array_unique(array_merge($this->_paths, $paths)); } /** * Retrieve the defined metadata lookup paths. * * @return array */ public function getPaths() { return $this->_paths; } /** * Get the file extension used to look for mapping files under * * @return void */ public function getFileExtension() { return $this->_fileExtension; } /** * Set the file extension used to look for mapping files under * * @param string $fileExtension The file extension to set * @return void */ public function setFileExtension($fileExtension) { $this->_fileExtension = $fileExtension; } /** * {@inheritdoc} */ public function loadMetadataForClass($className, ClassMetadataInfo $metadata) { $path = $this->_classPaths[$className]; require_once $path; } /** * {@inheritdoc} */ public function isTransient($className) { return true; } /** * {@inheritDoc} */ public function getAllClassNames() { $classes = array(); if ($this->_paths) { foreach ((array) $this->_paths as $path) { if ( ! is_dir($path)) { throw MappingException::phpDriverRequiresConfiguredDirectoryPath(); } $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::LEAVES_ONLY ); foreach ($iterator as $file) { if (($fileName = $file->getBasename($this->_fileExtension)) == $file->getBasename()) { continue; } $classes[] = $fileName; $this->_classPaths[$fileName] = $file->getPathName(); } } } return $classes; } }