3

モデル ディレクトリにシングルトン クラスがあり、その関数を Controller クラスで使用する必要があります。require_once('file path'); でそれを行う ClassName::FunctionName() としての関数の呼び出しは正常に機能しますが、require_once を介してクラスを含める代わりに Zend Autoloader を使用する必要があります。ここで、次のコードを追加するという点でbootstrap.phpを使用するstackoverflowで多くのソリューションに出くわしましたが、require_once('file path');と同じことをしているようです。コントローラーでやった

  protected function _initAutoload()
    {   
       Zend_Loader_Autoloader::getInstance();
    }

このようにすると、致命的なエラーが発生します: クラス 'ClassName' が {行番号} の {パス}\controllers\SampleController.php に見つかりません。

4

3 に答える 3

2

user1145086 が正しく言ったように、Zend の命名規則に従えば、クラスは自動ロードされるはずです。

AutoloadedClassなどのクラスがあり、それを自動ロードしたい場合は、次のようにします。

  1. /libraryフォルダーにフォルダーを作成し、「My」という名前を付けます。
  2. Bootstrap の initAutoload クラス メソッドに次のコードを記述します。

    Zend_Loader_Autoloader::getInstance()->registerNamespace(array('My_'));
    
  3. 「AutoloadedClass」を含むファイルを作成したばかりの「My」フォルダーに配置し、ファイルの名前を AutoloadedClass.php に変更して、ファイルが最終的に次のように配置されるようにします: /library/My/AutoloadedClass.php
  4. 最後に、Zend の命名規則に従って、クラス自体の名前を My_AutoloadedClass に変更します。今後は、そのクラス名 My_AutoloadedClass を使用して、アプリケーションのどこからでもクラスへの参照を取得できます。
于 2012-01-13T08:31:02.250 に答える
1

Zend の規則に従ってクラスに名前を付けると、クラスは問題なく自動ロードされます。クラスが/application/models/myClass.phpにあり、次の名前が付けられている場合:

class Application_Model_MyClass {

    public function myMethod(){
    }
}

それは問題なく自動ロードされるはずです。シングルトンであるという事実が自動ロードに影響を与えるとは思いません。

独自のクラス名を使用する必要がある場合は、/libraryディレクトリで動作するオートローダーに新しい名前空間を追加し、次の行をapplication.iniに追加します。

autoloaderNamespaces[] = "MyNamespace_"

次に、/MyNamespaceディレクトリを/libraryディレクトリに追加し、それに応じてファイルに名前を付けます。

class MyNamespace_MyClass {
}

お役に立てれば。

于 2012-01-13T07:10:38.027 に答える
1

ライブラリ内のクラス名と場所がZend の命名規則に従っていない場合は、そのライブラリのオートローダーを作成し、このオートローダーをZend_Loader_Autoloaderスタックにプッシュできます。

例については、 https://stackoverflow.com/a/8820536/131824を参照してください。

于 2012-01-13T08:34:52.127 に答える