Bravo3\Orm\Services\EntityLocator::locateEntities PHP Method

locateEntities() public method

Assumes PSR-0/4 compliant entity class names, and an appropriate auto-loader is installed.
public locateEntities ( string $dir, string $namespace, string $regex = '/^.+\.php$/i' ) : string[]
$dir string Directory to scan
$namespace string PSR base namespace for the directory
$regex string Filter for file matching
return string[]
    public function locateEntities($dir, $namespace, $regex = '/^.+\\.php$/i')
    {
        $dir = str_replace('\\', '/', $dir);
        if (substr($dir, -1) != '/') {
            $dir .= '/';
        }
        $base_len = strlen($dir);
        $namespace = str_replace('/', '\\', $namespace);
        if (substr($namespace, -1) != '\\') {
            $namespace .= '\\';
        }
        $normaliser = $this->getNormaliser();
        $iterator = new \RegexIterator(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir)), $regex, \RecursiveRegexIterator::GET_MATCH);
        $out = [];
        foreach ($iterator as $fn => $data) {
            $suffix = str_replace('/', '\\', substr($fn, $base_len));
            $class = $normaliser($namespace . $suffix);
            if (!class_exists($class)) {
                continue;
            }
            if ($this->entity_manager) {
                try {
                    $this->entity_manager->getMapper()->getEntityMetadata($class);
                } catch (\Exception $e) {
                    continue;
                }
            }
            $out[] = $class;
        }
        return $out;
    }

Usage Example

Example #1
0
 public function testLocation()
 {
     $locator = new EntityLocator($this->entityManagerDataProvider()[0][0]);
     $entities = $locator->locateEntities(__DIR__ . '/../Entities', 'Bravo3\\Orm\\Tests\\Entities');
     $this->assertTrue(count($entities) >= 29);
     $this->assertContains(IndexedEntity::class, $entities);
     $this->assertContains(SluggedArticle::class, $entities);
     $this->assertContains(BadEntity::class, $entities);
     $this->assertContains(Category::class, $entities);
     $this->assertNotContains(Enum::class, $entities);
 }
All Usage Examples Of Bravo3\Orm\Services\EntityLocator::locateEntities