2

Zend Framework を学習しようとしています。私はそれに非常に興味がありますが、Zend_Form クラスが格納されていると思われる場所を示すチュートリアルが見つかりません! 多分それは非常に簡単なことですが、まだ取得できません...これに関するチュートリアルを見てきました:

<?php
 class Form_Example extends Zend_Form
 {
  public function init()
  {
   // Great code here
  }
 }

しかし、誰もこのコードがどこに行くのか言いませんでした????? ディレクトリツリーのどのフォルダにあるファイルで?? 私は読んで理解し、モジュール、コントローラー、アクション、レイアウトを使用して小さな例を作成しました。名前の規則とフォルダー構造の重要性を知っています。では、このフォーム クラスはどこに移動する必要があり、ビューからどのように呼び出すことができますか??

ありがとうございます。Zend Framework の操作方法を既に知っている人にとっては、これは簡単なはずです =)

4

3 に答える 3

2

これを行う最善の方法は、ZF に任せることです。ZF には、Windows と *nix の両方のコマンド ライン インターフェイスが付属しています。

コマンド ラインで と入力するzf create form Exampleと、ZF はExample.phpデフォルトのアプリケーション レベルの場所に名前が付けられた空のフォームを作成します。

通常、これは at でapplication/forms/Example.phpあり、クラス名は ですApplication_Form_Example

モジュール内にフォームを構築する必要がある場合、コマンドは似ています:
zf create form Example -m admin
where-mはモジュール内にファイルを作成することを示し、adminはモジュールの名前です。

フォームは Zend Framework の定義済みリソースの 1 つであり、デフォルトの場所があります。事前定義され、デフォルトを持つ他のリソースがいくつかあります。

モジュール リソース オートローダー

Zend Framework には、Zend Framework MVC アプリケーションの既定の推奨ディレクトリ構造をカバーするリソース タイプ マッピングを含む Zend_Loader_Autoloader_Resource の具体的な実装が付属しています。このローダー Zend_Application_Module_Autoloader には、次のマッピングが付属しています。

    forms/          => Form
    models/         => Model
    models/DbTable/ => Model_DbTable
    models/mappers/ => Model_Mapper 
    plugins/        => Plugin 
    services/       => Service views/
    helpers         => View_Helper
    filters         => View_Filter 

例として、「Blog_」というプレフィックスを持つモジュールがあり、クラス「Blog_Form_Entry」をインスタンス化しようとすると、リソース ディレクトリの「forms/」サブディレクトリで「Entry.php」という名前のファイルが検索されます。Zend_Application でモジュール ブートストラップを使用すると、Zend_Application_Module_Autoloader のインスタンスがデフォルトで個別のモジュールごとに作成され、モジュール リソースをオートロードできるようになります。

于 2012-09-08T02:28:18.510 に答える
2

あなたの質問の中心にあるのは、次の問題です。

  1. オートローディング
  2. ZF オートローダーの一般的な仕組み
  3. 標準の ZF アプリで ZF オートローダがデフォルトでどのように構成されているか

これらは、明らかに関連性はあるものの、実際には 3 つの異なる問題です。

appnamespaceが "Application" に設定されているデフォルトの ZF インストールがあると仮定すると、フォーム クラスに名前を付けApplication_Form_Exampleてファイルに保存しますapplication/forms/Example.php

次に、次を使用して (たとえば、コントローラーで) インスタンス化できます。

$form = new Application_Form_Example().

resources.modules[] =が入っていることを確認してくださいapplication/configs/application.ini

自動ロードに関する追加の議論については、https: //stackoverflow.com/a/10933376/131824 を参照してください。

于 2012-09-08T06:01:09.830 に答える
2

私は通常、すべてのフォームをモデル、コントローラー、ビューと一緒にフォーム フォルダーに入れています。

したがって、私のファイル構造は次のようになります。

application ->
  configs
  layouts
  plugins
  controllers
  models
  views
  forms ->
    form1.php
    form2.php

アプリケーションでそれらを使用するのはそれほど単純ではありません。コントローラーでフォーム クラスをインスタンス化してから、フォームをビューに渡す必要があります。したがって、コントローラーには次のようなものが必要です。

$form1 = new Application_Form_Form1($options);
$request = $this->getRequest();

if($request->isPost()) {
  if($form1->isValid($post))  {
    // form is valid, do form processing here
  }
}

$this->view->form1 = $form1;

次に、ビュー ファイル内に次のフォームを配置します。

<html>
<body>
  <div id="body">
    <?php echo $this->form1; ?>
  </div>
</body>
</html>
于 2012-09-07T22:10:11.860 に答える