簡體   English   中英

如何為Symfony 2.1添加名稱空間?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM