如果路径结构不是默认值,则不能使用symfony2类加载器

时间:2011-12-30 10:08:15

标签: php symfony classloader

看起来像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'

2 个答案:

答案 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

希望这会对某人有所帮助。