2

ねえ、私はかなり恐ろしい学習曲線を登っているようです。コードを構造化/記述できるようになるまでには、何時間もかかります。もともとは、フォームまたはモデルをそれぞれのモジュール内に格納できるようにしたかったのです。たとえば、。/ application / module / ModuleName / forms / ClassName.phpですが、クラスをインスタンス化しようとすると、$ form = new ModuleName_Form_ClassName( ); 失敗しました。したがって、デフォルトのモジュールに移動することですべてを簡素化すると思いました。しかし、それはまだ機能していません。私はまだ何か間違ったことをしています。何がわからない。

私のコントローラーアクションの中にはこれがあります:

// some other code
$form = new Form_Login();

アクションをロードすると、次のエラーメッセージが表示されます。

Fatal error: Class 'Form_Login' not found in /some folder/www/application/modules/default/controllers/AdministrationController.php on line 22

私のapplication.iniには次のものが含まれています。

appnamespace = "SomeModule"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = 

フォームは./application/modules/default/forms/Login.php内に保存されます

1.どうすればこれをトラブルシューティングできますか?私が受け取っているエラーメッセージはほとんど役に立たないです。

2. __autoload()関数をデバッグする方法があれば、私の問題はすべて解決されると思います。ありませんか?

3.デフォルトモジュール内の別のモジュールのモデル/フォームを使用する方法はありませんか?それが私がやりたかったことです。すべてがより構造化されると思いました。これが不可能な場合、これがどのように役立つのかまったくわかりません...

乾杯、

病んでいる初心者のZend開発者。

4

1 に答える 1

5

ほぼ初めてのようですね。モジュールがユーザーであり、フォームがログインであるとしましょう。動作するためapplication/module/users/forms/Login.phpに:

  • そのファイルで定義されているフォームクラスを呼び出す必要がありますUsers_Form_Login
  • あなたresources.modules[] = はあなたのapplication.iniでモジュールリソース(あなたが持っている)を初期化する必要があります
  • そのモジュールにはモジュールブートストラップが必要です(これがモジュールオートローダーを設定するものです)。したがって、最低限、次のようなブートストラップクラスが必要です。

class Users_Bootstrap extends Zend_Application_Module_Bootstrap
{

}

で定義されapplication/module/users/Bootstrap.phpます。パスでは大文字と小文字が区別されます。

オートローダーのデバッグは非常に難しい場合があることに同意します。残念ながら、オートローダーは機能するか機能しないかのいずれかですが、一度セットアップすると、忘れてしまう可能性があります。上記が3番目の質問に答えることを願っています-はい、デフォルトのモジュール内で別のモジュールのフォームを使用できます。

于 2010-10-19T21:08:07.683 に答える