Skip to content

Commit 9b21b8d

Browse files
committed
add a more or less dirty hack to support autoloading when compiling from an external project/package
1 parent 3ce65d7 commit 9b21b8d

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

bin/webforge-doctrine-compiler

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
use Webforge\Console\Application;
55
use Webforge\Doctrine\Compiler\Console\CompileCommand;
6+
use Webforge\Common\System\Dir;
67

78
$container = require __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'bootstrap.php';
89
$webforge = $container->getWebforge();

bootstrap.php

-1
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,3 @@
1515
$bootLoader->registerPackageRoot();
1616

1717
return $bootLoader->registerContainer();
18-

lib/Webforge/Doctrine/Compiler/Console/CompileCommand.php

+29-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Webforge\Common\System\System;
1111
use Webforge\Common\JS\JSONConverter;
1212
use Webforge\Code\Generator\ComposerClassFileMapper;
13+
use Webforge\Common\System\Dir;
1314

1415
use Webforge\Doctrine\Compiler\Compiler;
1516
use Webforge\Doctrine\Compiler\EntityGenerator;
@@ -18,6 +19,7 @@
1819
use Webforge\Doctrine\Compiler\EntityMappingGenerator;
1920
use Webforge\Doctrine\Compiler\Inflector;
2021

22+
2123
class CompileCommand extends \Webforge\Console\Command\CommandAdapter {
2224

2325
protected $name = 'orm:compile';
@@ -57,18 +59,42 @@ public function doExecute(CommandInput $input, CommandOutput $output, CommandInt
5759

5860
$target = $input->getDirectory('psr0target');
5961

60-
$this->getCompiler()->compileModel($jsonModel, $target, $flags = Compiler::COMPILED_ENTITIES | Compiler::RECOMPILE);
62+
$this->getCompiler($target)->compileModel($jsonModel, $target, $flags = Compiler::COMPILED_ENTITIES | Compiler::RECOMPILE);
6163

6264
$output->ok('The model was successful compiled.');
6365
return 0;
6466
}
6567

66-
protected function getCompiler() {
68+
protected function getCompiler(Dir $target) {
6769
if (!isset($this->compiler)) {
6870
$webforge = $this->getWebforge();
71+
$container = $GLOBALS['env']['container'];
72+
73+
/* augment autoloader with autoloading information from the calling package */
74+
$package = $webforge->getPackageRegistry()->findByDirectory($target);
75+
76+
if ($package && $package->getIdentifier() != $container->getPackage()->getIdentifier()) {
77+
$dir = $package->getDirectory('vendor')->sub('composer');
78+
$loader = $container->getAutoLoader();
79+
80+
$map = require (string) $dir->getFile('autoload_namespaces.php');
81+
foreach ($map as $namespace => $path) {
82+
$loader->set($namespace, $path);
83+
}
84+
85+
$map = require (string) $dir->getFile('autoload_psr4.php');
86+
foreach ($map as $namespace => $path) {
87+
$loader->setPsr4($namespace, $path);
88+
}
89+
90+
$classMap = require $dir->getFile('autoload_classmap.php');
91+
if ($classMap) {
92+
$loader->addClassMap($classMap);
93+
}
94+
}
6995

7096
$webforge->setClassFileMapper(
71-
new ComposerClassFileMapper($GLOBALS['env']['container']->getAutoLoader())
97+
new ComposerClassFileMapper($loader)
7298
);
7399

74100
$this->compiler = new Compiler(

0 commit comments

Comments
 (0)