質問
Drupalは、モジュールを介したクラスの自動装置をどのように処理しますか?たとえば、イベントモジュールがあり、イベントと呼ばれるクラスを宣言し、.infoファイルにクラスファイルを含める場合、これはどのように登録されていますか?
問題は、すべてのロードされたクラス名を含む配列を動的に取得しようとしていることです。 get_declared_classes() この方法で宣言されたすべてのクラスの名前を返さないので、何らかの形で自動装備されていると思います。別のスタックオーバーフローの質問からの提案に従って、私はそれらすべてをで取得しようとしました spl_autoload_functions(), 、しかし、それも失敗しました。
何か案は?
解決
.infoファイルにリストされているすべてのファイルは、モジュールが再構築されるときに解析されます(パフォーマンスの理由により、そのリストの変更/新しいファイルのみがあります)。
その情報は、に保存されます {registry}
と {registry_files}
テーブル。したがって、特定の命名パターンに従ってすべてのクラスまたはそれを取得したい場合は、それらのテーブルを照会できます。
他のヒント
Drupalはコードレジストリを維持し、クラスAutoloaderに使用します。このレジストリをモジュールのクラスに入力するには、.infoファイルのファイル[]エントリにファイルを追加する必要があります。
files[] = includes/Foo.inc
files[] = includes/Bar.inc
PHPのクラスオートローディングにより、親クラスファイルもロードされていることを確認します。
この回答については、ユーザーピアブイルへのクレジット、彼を参照してください ここで元の答え 同じ質問のために。
それが役立つことを願っています
spl_autoload_functions()
登録されているAutoLoAD関数のリストを返します spl_autoload_register()
. 。 Drupalは2つのAutoload関数を登録します。1つはクラス用です(drupal_autoload_class())、およびインターフェイス用(drupal_autoload_interface()).
両方の関数が使用します _registry_check_code();コードを使用して、Drupal 7モジュールによって実装されたすべてのクラスをリストする関数を記述できます。
.infoファイルのファイル[]の配列へのエントリを追加した場合、Modules管理セクションに移動して「構成の保存」をクリックする必要があります。これにより、Drupalが.info情報を更新し、新しいエントリが登録されます。
インストールファイルにインクルードファイルを宣言しても、モジュールの実行を開始しても認識されないことがわかりました。ファイルイベントにクラスイベントがある場合。ただし、モジュール内のオブジェクトをクレートすると、認識されていません。線を追加します
include_once ('CMatArticleHandler.inc');
$ variable = new event()の前に;ライン。私はこれで新しいので、これ以上のものがあるかもしれませんが、これまでのところうまくいっています。