[英]How can I add a namespace to 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->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中調試此問題的最佳方法是什么?
目錄結構錯誤。 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'));
您有不同的選擇:
在實際的自動加載器中注冊名稱空間。
在app / autoload.php中注冊您的名稱空間。 您可以在這里看到一個示例https://github.com/symfony/symfony-standard/blob/2.0/app/autoload.php#L9
將庫添加到PHP include_path
將名稱空間添加到composer(即使庫中沒有composer.json,也可以在composer.json中添加自定義名稱空間)
在以下文件中,您將看到列出的一些名稱空間。 您可以用相同的方式添加您的:
// approot/vendor/composer/autoload_namespaces.php
return array(
'Twig_Extensions_' => $vendorDir . '/twig/extensions/lib/',
....
....
'' => $baseDir . '/src/',
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.