. */ namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\DoctrineException, 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 extends AbstractDriver implements Driver { /** The array of class names found and the path to the file */ private $_classPaths = array(); /** * {@inheritdoc} */ public function loadMetadataForClass($className, ClassMetadataInfo $metadata) { $path = $this->_classPaths[$className]; include $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) { $info = pathinfo($file->getPathName()); if ( ! isset($info['extension']) || $info['extension'] != $this->_fileExtension) { continue; } $className = $info['filename']; $classes[] = $className; $this->_classPaths[$className] = $file->getPathName(); } } } return $classes; } }