-->

我怎么能一个命名空间添加到Symfony的2.1?(How can I add a namespac

2019-08-17 00:45发布

我有一个第三方的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调试这个问题的最佳方式是什么?

Answer 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'));


Answer 2:

您有不同的选择:

注册在您的实际自动加载的命名空间。

注册在app / autoload.php您的命名空间。 你可以在这里看到这样一个例子https://github.com/symfony/symfony-standard/blob/2.0/app/autoload.php#L9

该库添加到PHP的include_path

添加命名空间作曲家(你可以在你composer.json添加自定义的命名空间,即使图书馆没有composer.json)



Answer 3:

在下面的文件,你会看到列出了一些命名空间。 您可以添加你以同样的方式:

// approot/vendor/composer/autoload_namespaces.php

return array(
    'Twig_Extensions_' => $vendorDir . '/twig/extensions/lib/', 
    ....
    ....
    '' => $baseDir . '/src/',
);


文章来源: How can I add a namespace to Symfony 2.1?