看起来像symfony2类加载器不允许命名空间的不同路径,任何人都有任何想法?(更改类加载器除外)。
$loader = new \Symfony\Component\ClassLoader\UniversalClassLoader();
$loader->registerNamespaces(
array(
'Symfony\\Component' => \realpath('/myapp/path' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'Symfony2Components')
)
);
$loader->register(true);
// in other file
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals(); // <-- resolves to : '/myapp/path/vendor/Symfony2Components/Symfony/Component/HttpFoundation/Request.php'
// expected '/myapp/path/vendor/Symfony2Components/HttpFoundation/Request.php'
答案 0 :(得分:1)
这不是一个错误。 Symfony2 ClassLoader符合PSR-0:
从文件系统加载时,每个命名空间分隔符都会转换为DIRECTORY_SEPARATOR。
您只需定义根路径,但所有命名空间部分仍将在路径中使用。
答案 1 :(得分:0)
@Maerlyn我也考虑过这一点,但不是,请注意你。
https://github.com/nimmen/ClassLoader/commit/0881a02d3210fd6376abd3b62f0c665642d310bb
做了很小的改动,现在它的工作原理(imo as it should):
注册名称空间示例:
name \ space =&gt; /目录/ ectory
另一个\ name =&gt; /另一个/ DIR
\ name \ space \ classname解析为:
/dir/ectory/classname.php
\ another \ name \ space \ class解析为:
/another/dir/space/class.php
希望这会对某人有所帮助。