我有一个第三方的lib使用的命名空间我想补充的供应商目录。 对于某些原因,我无法使用作曲家这个库。 使用ClassLoader的Add方法对我不起作用添加它(“类未找到”)。 详细地:
我使用的Symfony 2.1.7。
// app/autoload.php
use Doctrine\Common\Annotations\AnnotationRegistry;
$loader = require __DIR__.'/../vendor/autoload.php';
$loader->add('Example', realpath(__DIR__.'/../vendor/example/src'));
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
return $loader;
在供应商目录的目录结构:
//vendor/example/src/Foo.php
namespace Example;
class Foo {
}
在我的控制器使用它:
$bar = new \Example\Foo();
结果:
类的实施例\富'没有找到
哪里是我的错? 和/或:什么是在Symfony的2.1调试这个问题的最佳方式是什么?
目录结构是错误的。 既UniversalClassLoader和作曲者的类加载器(在Symfony的<2.1使用)(在2.1的Symfony使用)实现PSR-0标准自动装载机。 该标准要求,与命名空间中的文件不能在根目录下,并且必须最少一个目录下创建。
这为我工作:
目录结构
//在autoload.php
// Symfony 2.1 using Composer's ClassLoader
$loader->add('Example', realpath(__DIR__.'/../vendor/example/example/src'));
您有不同的选择:
注册在您的实际自动加载的命名空间。
注册在app / autoload.php您的命名空间。 你可以在这里看到这样一个例子https://github.com/symfony/symfony-standard/blob/2.0/app/autoload.php#L9
该库添加到PHP的include_path
添加命名空间作曲家(你可以在你composer.json添加自定义的命名空间,即使图书馆没有composer.json)
在下面的文件,你会看到列出了一些命名空间。 您可以添加你以同样的方式:
// approot/vendor/composer/autoload_namespaces.php
return array(
'Twig_Extensions_' => $vendorDir . '/twig/extensions/lib/',
....
....
'' => $baseDir . '/src/',
);