0

ベンダー ディレクトリに追加したい名前空間を使用するサード パーティのライブラリがあります。特定の理由により、このライブラリに 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 ディレクトリのディレクトリ構造:

ディレクトリ構造

//vendor/example/src/Foo.php
namespace Example;
class Foo {

}

私のコントローラーでそれを使用する:

 $bar = new \Example\Foo();

結果:

クラス 'Example\Foo' が見つかりません

私の間違いはどこですか?および/または: Symfony 2.1 でこの問題をデバッグする最善の方法は何ですか?

4

3 に答える 3

3

ディレクトリ構造が間違っています。UniversalClassLoader (Symfony < 2.1 で使用) と Composer の ClassLoader (Symfony 2.1 で使用) の両方が、PSR-0 オートローダー標準を実装しています。この標準では、名前空間を持つファイルをルート ディレクトリに置くことはできず、少なくとも 1 つのディレクトリの下に作成する必要があります。

これは私のために働いた:

ディレクトリ構造 作業ディレクトリ構造

// autoload.php 内

// Symfony 2.1 using Composer's ClassLoader
$loader->add('Example', realpath(__DIR__.'/../vendor/example/example/src'));
于 2013-02-16T19:42:56.477 に答える
0

次のファイルには、いくつかの名前空間がリストされています。同じ方法で追加できます。

// approot/vendor/composer/autoload_namespaces.php

return array(
    'Twig_Extensions_' => $vendorDir . '/twig/extensions/lib/', 
    ....
    ....
    '' => $baseDir . '/src/',
);
于 2013-03-05T23:54:07.490 に答える
0

さまざまなオプションがあります。

実際のオートローダーに名前空間を登録します。

名前空間を app/autoload.php に登録します。ここでその例を見ることができますhttps://github.com/symfony/symfony-standard/blob/2.0/app/autoload.php#L9

ライブラリを PHP の include_path に追加します。

名前空間を composer に追加します (ライブラリに composer.json がない場合でも、composer.json にカスタム名前空間を追加できます)。

于 2013-02-16T16:05:35.633 に答える