2009-03-23 11 views
11

私は、MVCとZend Frameworkの新機能です。つまり、私のディレクトリ構造にFormsがどこに属しているかを調べるのは苦労しているようです。私はモジュール式のディレクトリ構造を持っているので、フォームディレクトリが1つであるか、各モジュールディレクトリ内に1つずつあるかはわかりません。Zend Frameworkでのフォームの使用

/application 
    /modules/ 
     /default 
      /controllers 
      /views 
     /admin 
      /controllers 
      /views 

フォームのディレクトリを決定したら、そのディレクトリをブートストラップのインクルードパスに設定しますか?または、それが使用されているコントローラにフォームを含めますか?

どのようにフォームをZend Frameworkで使用しますか?

答えて

11

それは少し遅いですが、ZFの現在のバージョンでは、これは解決されています

次のページでhttp://framework.zend.com/manual/en/zend.loader.autoloader-resource.html 手動状態:

30.3.2を。モジュールリソースオートローダー Zend Frameworkには、Zend Framework MVCアプリケーションのデフォルトの推奨ディレクトリ構造をカバーするリソースタイプマッピングを含むZend_Loader_Autoloader_Resourceの具体的な実装が付属しています。このローダー、Zend_Application_Module_Autoloaderは、以下のマッピングが付属しています。一例として、

api/   => Api 
forms/  => Form 
models/  => Model 
    DbTable/ => Model_DbTable 
plugins/  => Plugin 

を、あなたは「Blog_」の接頭辞を持つモジュールを持ち、そしてクラス「Blog_Form_Entry」をインスタンス化しようとすると、それはになります"Entry.php"という名前のファイルのリソースディレクトリの "forms /"サブディレクトリ。 Zend_Applicationでモジュールブートストラップを使用すると、Zend_Application_Module_Autoloaderのインスタンスが個別モジュールごとにデフォルトで作成され、モジュールリソースを自動読み込みできるようになります。

これは、しかし、Zend_Application

+0

お役立ち情報私は最近の変更に追いついていないので、これが現在のバージョンで対処されたことを知るのに役立ちます。 – Andrew

+0

私が探していたもの。私はモデル/フォームのルートに行き、現在zendの標準/推奨に合わせるために私の構造をリファクタリングしています。 – rvdavid

2

2009年3月現在、ZFの思考リーダーは、すべてを整理する最良の方法について議論しているようです。 ZF v1.8には、scaffolding-generator as a part of Zend_Toolがリリース予定です。それは現在インキュベーターにあります、私は先週それを試して、それは動作しますが、多くのコンポーネントは現在の状態で生成されていません。

私は(これはアクションでZend Frameworkのからである)彼らは最高の彼らはとの相互作用のモデルとは別に管理されているようです見てきた例から:

/application 
    /modules/ 
     /default 
      /controllers 
      /forms 
       ContactForm.php 
       LoginForm.php 
       RegisterForm.php 
       SupportForm.php 
      /models 
       Comment.php 
       User.php 
       Users.php 
      /views 
     /admin 
      /controllers 
      /views 

しかし、私はまた、構造を見てきましたモデルディレクトリの下にフォームがあります。

/application 
    /modules/ 
     /default 
      /controllers 
      /models 
       Comment.php 
       User.php 
       /Form 
        Comment.php 
        Login.php 
        Register.php 
      /views 
     /admin 
      /controllers 
      /views 

は、アンダースコアモデルを使用して、クラスに名前を付けるようにしてください含まれ、自動的にあなたのファイルを持っている:マシューウェアーO'Phinneyは、自分自身をuse them for validation on modelsする方法を示しています。私たちは私たちの中に 'デフォルト' モジュールが含まれている場合、上記の第1の構成を想定し、同様に

Zend/Controller/Action.php 

:はZend_Loaderは

class RegisterController extends Zend_Controller_Action 

を見てそれはのためのPHPのinclude_pathに見え例えば

、あなたのクラスには:

Forms_ContactForm 
Models_User 

一部のプログラマはパスを含め、彼らは余分を追加する必要はありませんので、ライブラリにそのファイルのほとんどを置くことを選択します。

/library 
    /My 
     /Form 
      Contact.php 

は、ライブラリフォルダが含まれていると仮定すると、上記のクラスは次のようになり名前:

My_Form_Contact 

最高の運! -Matt

+0

に応じて定義する必要があります。あなたに質問がある場合はお知らせください。 –

+0

この方法では、すべてのモジュールディレクトリをinclude_pathに追加する必要があるという問題があります。また、Forms_ContactFormは冗長で醜いようです。 – leek

+0

私は完全に同意します。その特定のフォルダ構造はincludeステートメントで使用されています(Zend Loader用ではありません)。とにかく、あなたの提案は、はるかにエレガントです。 :) –

1

個人的には、自分のモジュールディレクトリをインクルードパスに入れて、Zend Loaderパターンに自分のフォームクラスの名前を付けるのが最も簡単だと分かりました。

例のディレクトリ構造(Mattの答えからコピー):

/application 
    /modules/ 
     /default 
      /controllers 
      /forms 
       Contact.php 
       Login.php 
       Register.php 
       Support.php 
      /models 
       Comment.php 
       User.php 
       Users.php 
      /views 
     /admin 
      /controllers 
      /views 

例フォームのクラス名:

Default_Forms_Contact 
Default_Forms_Login 
Default_Forms_Register 
Default_Forms_Support 

私は物事をシンプルに保つために同様に私のモデルやプラグインに名前を付けます。

この問題が、Zend Frameworkのそれ以降のバージョンで正しく解決されたことを願っています。

更新日: * nixプラットフォームではこの構造は機能しません。それがハードな方法を見つけた! Zend Loaderは大文字と小文字を区別する環境で動作するように、モジュール、フォーム、モデルフォルダを大文字にする必要があります。

+0

ちょうど注記:私はまた、 '{Module} _Forms_ {Name}'も醜いと思う。 – leek

-1

すべてのモデルをライブラリのフォルダに入れました。概念は私の会社の名前です。

/application 
/modules/ 
    /default 
     /controllers 
     /views 
    /admin 
     /controllers 
     /views 
/libray/ 
    /Zend 
    /Notion 
     /Form 

これにより、既にライブラリフォルダが含まれているため、ファイルを簡単にインクルードして見つけることができます。

Notion_Form_Login 
Notion_Db_Manager_Login 
+1

異なるモジュールに異なるフォームがある場合はどうなりますか? – rvdavid

1

私は、彼らがライブラリに属していると思いますし、ただ一つのフォルダが簡単にそれらを自動ロード作る持っていけないので、私は個人的に、私のアプリケーションフォルダでそれらを維持したいです。

/application 
/forms 
/modules/ 
    /default 
     /controllers 
     /views 
    /admin 
     /controllers 
     /views 
/libray/ 
    /Zend 

と私はちょうどフォームパスをincludes_pathに追加しました。私は行きたいです。

1

の使用は、Zendのコマンドツールはそのためのフォームを作成することができます必要がない:

ZFフォーム製品の販売に販売が名前である

を作成コマンドツールはモジュールsalesとファイルProduct内にディレクトリフォームを作成します。クラスとPHP:

class sales_Form_Product extends Zend_Form { 

、あなたのモジュールのディレクトリ

4

は、アプリケーション/モジュール/ yourmodule/bootstrap.phpのファイルに以下を追加定義するために、デZend_Application_Module_Autoloaderの定義を追加する必要があります。

class Yourmodule_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 

protected function _initAutoload() 
    { 
     $autoloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => 'Yourmodule_', 
      'basePath' => APPLICATION_PATH .'/modules/yourmodule', 
      'resourceTypes' => array (
       'form' => array(
        'path' => 'forms', 
        'namespace' => 'Form', 
       ), 
       'model' => array(
        'path' => 'models', 
        'namespace' => 'Model', 
       ), 
      ) 
     )); 
     return $autoloader; 
    } 

} 
0
$selectexamname = new Admin_Form_examresults_Selectexamname(); 
     $this->view->selectexamname = $selectexamname; 

あなたのクラスは、私は上記の回答にいくつかの追加の注意事項を追加しました。この形式

class Admin_Form_examresults_Selectexamname extends Zend_Form {} 
関連する問題