Register the namespace with the autoloading to allow reverse recovery
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
3f86f1276f
commit
9667ac2b8e
|
@ -37,12 +37,26 @@ class ServerContainer extends SimpleContainer {
|
|||
/** @var DIContainer[] */
|
||||
protected $appContainers;
|
||||
|
||||
/** @var string[] */
|
||||
protected $namespaces;
|
||||
|
||||
/**
|
||||
* ServerContainer constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->appContainers = [];
|
||||
$this->namespaces = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $appName
|
||||
* @param string $appNamespace
|
||||
*/
|
||||
public function registerNamespace($appName, $appNamespace) {
|
||||
// Cut of OCA\ and lowercase
|
||||
$appNamespace = strtolower(substr($appNamespace, strrpos($appNamespace, '\\') + 1));
|
||||
$this->namespaces[$appNamespace] = $appName;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -54,15 +68,19 @@ class ServerContainer extends SimpleContainer {
|
|||
}
|
||||
|
||||
/**
|
||||
* @param string $appName
|
||||
* @param string $namespace
|
||||
* @return DIContainer
|
||||
* @throws QueryException
|
||||
*/
|
||||
public function getAppContainer($appName) {
|
||||
if (isset($this->appContainers[$appName])) {
|
||||
return $this->appContainers[$appName];
|
||||
protected function getAppContainer($namespace) {
|
||||
if (isset($this->appContainers[$namespace])) {
|
||||
return $this->appContainers[$namespace];
|
||||
}
|
||||
|
||||
return new DIContainer($appName);
|
||||
if (isset($this->namespaces[$namespace])) {
|
||||
return new DIContainer($this->namespaces[$namespace]);
|
||||
}
|
||||
throw new QueryException();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -77,11 +95,11 @@ class ServerContainer extends SimpleContainer {
|
|||
// the apps container first.
|
||||
if (strpos($name, 'OCA\\') === 0 && substr_count($name, '\\') >= 2) {
|
||||
$segments = explode('\\', $name);
|
||||
$appContainer = $this->getAppContainer(strtolower($segments[1]));
|
||||
try {
|
||||
$appContainer = $this->getAppContainer(strtolower($segments[1]));
|
||||
return $appContainer->queryNoFallback($name);
|
||||
} catch (QueryException $e) {
|
||||
// Didn't find the service in the respective app container,
|
||||
// Didn't find the service or the respective app container,
|
||||
// ignore it and fall back to the core container.
|
||||
}
|
||||
}
|
||||
|
|
|
@ -189,6 +189,7 @@ class OC_App {
|
|||
self::$alreadyRegistered[$key] = true;
|
||||
// Register on PSR-4 composer autoloader
|
||||
$appNamespace = \OC\AppFramework\App::buildAppNamespace($app);
|
||||
\OC::$server->registerNamespace($app, $appNamespace);
|
||||
\OC::$composerAutoloader->addPsr4($appNamespace . '\\', $path . '/lib/', true);
|
||||
if (defined('PHPUNIT_RUN') || defined('CLI_TEST_RUN')) {
|
||||
\OC::$composerAutoloader->addPsr4($appNamespace . '\\Tests\\', $path . '/tests/', true);
|
||||
|
|
Loading…
Reference in New Issue