mirror of
https://github.com/danog/class-finder.git
synced 2024-11-26 20:14:59 +01:00
Add support for finding classes declared in a classmap
This commit is contained in:
parent
67831937e3
commit
c12a9779cc
@ -1,16 +1,36 @@
|
||||
<?php
|
||||
namespace HaydenPierce\ClassFinder\Classmap;
|
||||
|
||||
use HaydenPierce\ClassFinder\Exception\ClassFinderException;
|
||||
|
||||
class ClassmapEntry
|
||||
{
|
||||
private $namespace;
|
||||
private $directories;
|
||||
private $className;
|
||||
|
||||
public function __construct($namespace, $directories)
|
||||
public function __construct($fullyQualifiedClassName)
|
||||
{
|
||||
$this->namespace = $namespace;
|
||||
$this->directories = $directories;
|
||||
$this->className = $fullyQualifiedClassName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the class is a DIRECT child of the given namespace. Currently, no other finders support "recursively"
|
||||
* discovering classes, so the Classmap module will not be the exception to that rule.
|
||||
*
|
||||
* @param $namespace
|
||||
* @return bool
|
||||
*/
|
||||
public function matches($namespace)
|
||||
{
|
||||
$classNameFragments = explode('\\', $this->getClassName());
|
||||
array_pop($classNameFragments);
|
||||
$classNamespace = implode('\\', $classNameFragments);
|
||||
|
||||
$namespace = trim($namespace, '\\');
|
||||
|
||||
return $namespace === $classNamespace;
|
||||
}
|
||||
|
||||
public function getClassName()
|
||||
{
|
||||
return $this->className;
|
||||
}
|
||||
|
||||
}
|
@ -2,7 +2,6 @@
|
||||
namespace HaydenPierce\ClassFinder\Classmap;
|
||||
|
||||
use HaydenPierce\ClassFinder\AppConfig;
|
||||
use HaydenPierce\ClassFinder\Exception\ClassFinderException;
|
||||
|
||||
class ClassmapEntryFactory
|
||||
{
|
||||
@ -19,6 +18,13 @@ class ClassmapEntryFactory
|
||||
*/
|
||||
public function getClassmapEntries()
|
||||
{
|
||||
// Composer will compile user declared mappings to autoload_classmap.php. So no additional work is needed
|
||||
// to fetch user provided entries.
|
||||
$classmap = require($this->appConfig->getAppRoot() . 'vendor/composer/autoload_classmap.php');
|
||||
|
||||
$classmapKeys = array_keys($classmap);
|
||||
return array_map(function($index) use ($classmapKeys){
|
||||
return new ClassmapEntry($classmapKeys[$index]);
|
||||
}, range(0, count($classmap)));
|
||||
}
|
||||
}
|
@ -19,6 +19,14 @@ class ClassmapFinder implements FinderInterface
|
||||
*/
|
||||
public function findClasses($namespace)
|
||||
{
|
||||
$classmapEntries = $this->factory->getClassmapEntries();
|
||||
|
||||
$matchingEntries = array_filter($classmapEntries, function(ClassmapEntry $entry) use ($namespace) {
|
||||
return $entry->matches($namespace);
|
||||
});
|
||||
|
||||
return array_map(function(ClassmapEntry $entry) {
|
||||
return $entry->getClassName();
|
||||
}, $matchingEntries);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user