Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将名称空间添加到Symfony 2.1?_Php_Symfony_Symfony 2.1 - Fatal编程技术网

Php 如何将名称空间添加到Symfony 2.1?

Php 如何将名称空间添加到Symfony 2.1?,php,symfony,symfony-2.1,Php,Symfony,Symfony 2.1,我有一个使用名称空间的第三方库,我想添加到供应商目录中。由于某些原因,我无法将composer用于此库。使用ClassLoader的add方法添加它对我不起作用(“找不到类”)。详细内容: 我使用的是Symfony 2.1.7 // app/autoload.php use Doctrine\Common\Annotations\AnnotationRegistry; $loader = require __DIR__.'/../vendor/autoload.php'; $loader->

我有一个使用名称空间的第三方库,我想添加到供应商目录中。由于某些原因,我无法将composer用于此库。使用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中调试此问题的最佳方法是什么?

您有不同的选项:

在实际的自动加载程序中注册名称空间

在app/autoload.php中注册您的命名空间。你可以在这里看到一个例子

将库添加到PHP include_路径


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

您有不同的选项:

在实际的自动加载程序中注册名称空间

在app/autoload.php中注册您的命名空间。你可以在这里看到一个例子

将库添加到PHP include_路径


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

目录结构错误。UniversalClassLoader(用于Symfony<2.1)和Composer的ClassLoader(用于Symfony 2.1)都实现了PSR-0自动加载标准。此标准要求具有名称空间的文件不能位于根目录中,并且必须在至少一个目录下创建

这对我很有用:

目录结构

//在autoload.php中

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

目录结构错误。UniversalClassLoader(用于Symfony<2.1)和Composer的ClassLoader(用于Symfony 2.1)都实现了PSR-0自动加载标准。此标准要求具有名称空间的文件不能位于根目录中,并且必须在至少一个目录下创建

这对我很有用:

目录结构

//在autoload.php中

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

在下面的文件中,您将看到列出了一些名称空间。您可以使用相同的方式添加您的:

// approot/vendor/composer/autoload_namespaces.php

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

在下面的文件中,您将看到列出了一些名称空间。您可以使用相同的方式添加您的:

// approot/vendor/composer/autoload_namespaces.php

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

对symphony不太清楚,但在使用
$bar=new\example\Foo()实例化symphony之前,您可能会尝试使用vendor/example/src/Foo.php
@Sheikheera如果不在自动加载器中定义名称空间将无法工作。symphony不太确定,但在使用
$bar=new\example\Foo()实例化之前,您可能会尝试使用vendor/example/src/Foo.php
@SheikhHeera如果不在自动加载程序中定义名称空间将无法工作。他们将添加名称空间从2.0更改为2.1,因为现在使用的是Composer的类加载程序,所以旧的“registerNamespaces”方法在2.1中不再起作用。这就是我在示例代码中使用add()方法的原因。您在这里犯了一个错误。../vendor/autoload.php中没有registerNamespaces,但UniveralClassLoader中存在该方法。只需创建加载程序并注册它。您可以在同一时间启用多个加载程序。最终,您发现,目录结构是错误的(请参阅下面的答案)。无论如何,谢谢!:-)他们将添加名称空间从2.0改为2.1,因为现在使用了Composer的类加载器,所以旧的“registerNamespaces”方法在2.1中不再有效。这就是我在示例代码中使用add()方法的原因。您在这里犯了一个错误。../vendor/autoload.php中没有registerNamespaces,但UniveralClassLoader中存在该方法。只需创建加载程序并注册它。您可以在同一时间启用多个加载程序。最终,您发现,目录结构是错误的(请参阅下面的答案)。无论如何,谢谢!:-)令人惊叹的。谢谢我在symblog教程中需要这个。我添加的两行代码是:
$loader->add('Enquiry',realpath(\uu DIR\uu.'/../src/Blogger/BlogBundle/Entity')$loader->add('inquiryType',realpath(\uuuu DIR\uuuu.'/../src/Blogger/BlogBundle/Form')太棒了。谢谢我在symblog教程中需要这个。我添加的两行代码是:
$loader->add('Enquiry',realpath(\uu DIR\uu.'/../src/Blogger/BlogBundle/Entity')$loader->add('inquiryType',realpath(\uuuu DIR\uuuu.'/../src/Blogger/BlogBundle/Form')