1

Doctrine 2 プロジェクトに追加された Classloader に少し問題があります。次のような単純なディレクトリ構造があります。

  • config (ブートストラップ ファイル)
  • html (テンプレート/画像/js などを含むドキュメントルート)
  • php
  • エンティティ (ドクトリン 2 エンティティ)
  • 応答 (一部のトランスポート オブジェクト)
  • サービス (API とビジネス ロジックの処理 - Java のセッション Bean など)

各 php サブディレクトリは、独自の名前空間 (ディレクトリの名前と同じ) に属します。
前述のクラスローダーを使用してこれら 3 つの異なるパッケージをロードしたいので、ブートストラップは次のようになります。

$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', $lib );
$classLoader->register();

$responsesCL = new \Doctrine\Common\ClassLoader('Responses', __DIR__.'/../php');
$responsesCL->register();

$entitiesCL = new \Doctrine\Common\ClassLoader('Entities', __DIR__.'/../php');
$entitiesCL->register();

$servicesCL = new \Doctrine\Common\ClassLoader('Services', __DIR__.'/../php');
$servicesCL->register();

太字の DIR は実際には__ DIR __php 定数です。

現在、サービス パッケージでエンティティを参照していますが、これが問題の始まりです。何らかの理由で、ファイルが見つからないという問題が原因でエラーが発生します。たとえば、次のようになります。

必要な '/var/www/projects/PlatformManagement/config/../php/Services/Entities/User.php' (include_path='.:/usr/share/pear:/usr/share/php') を開くことができませんでした /usr/share/pear/Doctrine/Common/ClassLoader.php148

どういうわけか、パスに余分な「サービス」があり、明らかに有効なパスではありません。なぜそこに余分なディレクトリがあるのか​​ 少し困惑していますか?すべての名前空間と呼び出しを 3 回チェックしましたが、問題ありません。

見てもらうにはもう 1 組の目が必要です。ここで明らかな何かが欠けていると思いますが、それを見つけることはできません :|

ああ、これは最新の Doctrine 2 Beta (4) と fedora の php 5.3.3 です。

ありがとう、グレッグ

4

1 に答える 1

0

Doctrine\ORM\Tools\Setup::registerAutoloadPEAR() のようなものはありますか?

Doctrine の Autoloader は、PHP のインクルード パスに基づいてクラスをロードするため、予期しない動作を引き起こす可能性があります。

これを参照してください

あなたの場合、エンティティには

namespace Entities;

宣言であり、それ以外のものではありません。

そして、以下のようなエンティティを使用して、

use Entities\User;
new User;
于 2013-02-24T00:07:33.243 に答える