【问题标题】:How can I add a namespace to Symfony 2.1?如何向 Symfony 2.1 添加命名空间?
【发布时间】:2013-02-01 10:33:22
【问题描述】:

我有一个使用命名空间的 3rd 方库,我想将其添加到供应商目录中。由于某些原因,我不能为此库使用作曲家。使用 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();

结果:

找不到类'Example\Foo'

我的错误在哪里?和/或:在 Symfony 2.1 中调试此问题的最佳方法是什么?

【问题讨论】:

  • 不确定 symphony 但很可能你可以在使用 $bar = new \Example\Foo(); 实例化它之前尝试这个 use vendor/example/src/Foo.php
  • @SheikhHeera 将无法在自动加载器中定义命名空间。

标签: php symfony symfony-2.1


【解决方案1】:

目录结构错误。 UniversalClassLoader(在 Symfony

这对我有用:

目录结构

//在autoload.php中

// Symfony 2.1 using Composer's ClassLoader
$loader->add('Example', realpath(__DIR__.'/../vendor/example/example/src'));

【讨论】:

  • 太棒了。谢谢!我需要这个符号博客教程。我添加的两行是:$loader->add('Enquiry', realpath(__DIR__.'/../src/Blogger/BlogBundle/Entity')); $loader->add('EnquiryType', realpath(__DIR__.'/../src/Blogger/BlogBundle/Form'));
【解决方案2】:

你有不同的选择:

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

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

将库添加到 PHP 的 include_path

将命名空间添加到composer(即使库没有composer.json,您也可以在composer.json中添加自定义命名空间)

【讨论】:

  • 他们将添加命名空间从 2.0 更改为 2.1,因为现在使用 Composer 的 ClassLoader,因此旧的“registerNamespaces”方法不再适用于 2.1。这就是我在示例代码中使用 add() 方法的原因。
  • 你这里有一个错误。 ../vendor/autoload.php 中没有 registerNamespaces 但该方法存在于 UniveralClassLoader 中。只需创建加载程序并注册它。您可以同时启用多个加载器
  • 终于弄明白了,目录结构不对(见下面我的回答)。不管怎么说,还是要谢谢你! :-)
【解决方案3】:

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

// approot/vendor/composer/autoload_namespaces.php

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 2010-10-30
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多