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;
}