0

ZF2 をライブラリとして使用しています。次のようなかなり標準的な実装がspl_autoload_registerあります。

set_include_path(join(PATH_SEPARATOR, array(
    get_include_path(),
    ROOT . DS . 'library',
    ROOT . DS . 'application',
)));

spl_autoload_register();

どこ:

define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(dirname(__FILE__)));

私の Mac では、すべて正常に動作しています。私のCentOSサーバーでは、いいえ。何かが気に入らないというこのような問題を見たのspl_autoload_registerは、CamelCasing などを使用しようとしたときだけです。明らかに、そうではありません。読み込もうとしています:

\Zend\Config\Config

今、私のディレクトリ構造は次のようになります。

/application
    /controller
    /model
       /objects
       /dao
       /weeeeeeee 
    /view
      /template_html
/library
    /core
    /Zend
      /Config

あなたはアイデアを得る。

では、なぜこれが機能しないのでしょうか。

編集:Config.phpの代わりにconfig.phpを探していないことを教えてください...

4

1 に答える 1

2

spl_autoload大文字と小文字が区別されます。すべてのクラスは小文字のファイル名にマップされます。はい、これは非常識です。Google php バグ #49625 および #48129 の裏話。

ソリューション:

  1. 含まれているすべてのパスを含め、含まれているすべてのクラスの名前を小文字に変更します
  2. 大文字と小文字が混在するパスを処理する、より優れたオートローダーを作成する
  3. Composer のオートローダーを使用します。

すべての名前を変更するのは非現実的でばかげているので、車輪の再発明はしたくありませんが、Composer のオートローダーを使用してカスタム ライブラリを読み込むことができて幸運です。

Composer オートロード リファレンス

Composer にはZF2 パッケージcomposer.jsonがありますが、ファイルに autoload 定義を追加することで手動でロードできます。

{
    "autoload": {
        "psr-0": {"Zend": "library/"}
    }
}
于 2013-01-16T15:10:43.710 に答える