2011-04-24 93 views
1

經過多次閱讀,我意識到Zend_Form可以分爲各種表示形式,它很適合作爲模型。從Doctrine實體構建Zend_Form的元素

遵循Matthew Weier O'Phinney提出的邏輯,我想到了將Doctrine [2] Entitie傳遞給擴展Zend_Form的類的構造函數,在這種情況下,App_Form。

所以在我entitie,我有一個方法爲每個表單,下面的模式:

protected function _formFormName{}() 

是Entitie擴展抽象類App_Form_Entitie,有一個方法來檢索形式:

final public function getForm($form = null) 

並仍然有方法isValid()getMessage()

但很多人寧願留在單獨的文件形式,請參閱:

Where to place Zend_Forms, Controller? Model? Somewhere else?

我不知道其中哪些是最好的方法:通過實體的形式的構造函數作爲第一個參數,以及所需的形式,如可選的第二個參數,或從實體獲取表單(如Matthew所述),並將第一個參數作爲所需表單的名稱傳遞。

歡迎任何答案。

這裏是展示兩個例子怎麼會,2個碼,我的建議:

<?php 
//My controller action 
/* @var $em Doctrine\ORM\EntityManager */ 
$user = $em->find('MyNamespace\User', 1); 
$loginForm = new App_Form($user, array('form'=> 'login')); 
$this->view->loginForm = $loginForm; 

//My view script 
echo $this->loginForm; 

這裏馬修的建議,其中的形式在不同的文件:

<?php 
//My controller action 
/* @var $em Doctrine\ORM\EntityManager */ 
$user = $em->find('MyNamespace\User', 1); 
$formLogin = $user->getForm('login'); //The entity creates a new instance of the class App_Form_Login and returns it. 
$this->view->formLogin = $formLogin 

//In my view... 
echo $this->formLogin; 
+0

你可能會詳細說明這兩個選項的一段代碼? – rojoca 2011-04-25 14:55:22

+0

@rojoca我加了個例子。 – JCM 2011-04-25 20:11:57

回答

3

User實體創建App_Form對象似乎不太合適。您的實體是您的數據的理想化抽象,您可以在應用程序的其他部分參考。這並不妨礙你爲你的表單類型分開文件。我會去找像你的第一個選擇:

<?php 
//My controller action 
/* @var $em Doctrine\ORM\EntityManager */ 
$user = $em->find('MyNamespace\User', 1); 
$loginForm = new App_Form_Login($user); 
$this->view->loginForm = $loginForm; 

//My view script 
echo $this->loginForm 
+0

好吧,下面的示例中,在我的Entitie中,我有受保護的方法_formLogin(),它返回一個包含表單信息的數組,在這種情況下是正確的用法,因爲我沒有創建表單本身的對象,只是有創建它所需的數據。對? – JCM 2011-04-25 21:46:29

+0

該方法必須是公開的,否則您如何訪問它?我不相信你需要這樣一種方法。在'App_Form_Login'中,您將可以訪問可以獲取/設置值的'User'對象。你還需要從'用戶'? – rojoca 2011-04-25 22:01:40

+0

你爲什麼要嘗試讓用戶實體描述表單...不是表單的用途? – Cobby 2011-04-26 03:22:56