2011-05-30 88 views
6

您是否曾經見過一本關於PHP表單框架的書籍,文章或教程?我不是在談論整個框架,而只是處理形式的一些部分。現在,我使用了Zend的表單和Symfony的表單,並且我正在學習如何構建框架,並堅持在「如何構建表單框架」部分。學習編寫PHP表單框架

我試過閱讀Zend's和Symfony的代碼,但我認爲它太大而複雜,沒有任何解釋。你有什麼建議,甚至可能有人介意解釋表單框架是如何工作的(甚至更好,如何構建表單框架)?

到目前爲止,我已經得到了什麼:

  1. 我需要創建一個抽象的形式對象,所以所有其他形式在我的應用程序可以從這裏繼承。表單必須至少有配置和保存的方法。
  2. 我們需要一個基礎小部件類(用於表單元素)和一個用於表單元素和小部件的基礎驗證器類。
  3. 我們需要以某種方式連接所有的表單。這是讓我困惑的部分。我怎樣才能連接所有的元素?

有人請給我一個提示嗎?

+2

你需要這個表單框架來做什麼?也就是說,你想要解決什麼問題?我認爲,錯誤的方法是嘗試模仿已經完成的工作 - 在框架XYZ中有抽象形式類和小部件類,因此我也必須這樣做。事實是,現有的框架在需求推動下對這些類有特定的原因。你知道那些需求是什麼嗎? – erisco 2011-05-30 07:49:25

+0

沒有表單框架。 Zend_Form是一個抽象,旨在使表單構建更統一一點,但這是關於它的。沒有大背後的哲學,都是基於HTML的形式。子形式的概念並不是一個真正的概念,只是一個竅門,每個形式實際上都是一個單獨的形式。 – 2011-05-30 07:52:49

+0

對不起,但我們的網絡(互聯網)目前狀況不佳,而且我有一個約會期待。我會盡快更新問題 - 添加我需要的表單框架。謝謝。 – bertzzie 2011-05-30 07:57:34

回答

0

我創建了一些東西來抽象我的小框架中的表單創作。

基本上我有兩個主要的類。元素類和element_container類。

我的大多數元素都擴展了元素類,除了表單,fieldset,div等(包含其他元素的元素),它們擴展了element_container類。

這是我簡單的輸入級:

class acs_form_input extends acs_element { 

    public function __construct($name) { 

     //These propertie is declared in the parent class 

     //By default the type is set to text 
     $this->setAttribute('type','text'); 
     $this->setAttribute('name',$name); 
     $this->setAttribute('id',$name); 

     $this->tpl_path = 'html/forms/form_input'; 
    } 
} 

因爲它擴展了元素類我只是說些什麼類型的,這是它會用什麼模板,渲染的過程全部在父做類。

的element_container類是基本相同的,除了它可以容納其他元素,因此具有當它renderes一個額外的處理(基本上是循環進行渲染元素的HTML)

我記住這是一個模型,所以在這裏是一個簡單的表單代碼:

$this->form->addText('name','Nome*'); 
     $this->form->addText('empresa','Empresa'); 
     $this->form->addText('morada','Morada')->setAttribute('size','60'); 
     $this->form->addText('cpostal1','C. Postal'); 
     $this->form->addText('cpostal2','-')->setAttribute('size','6'); 
     $this->form->addText('loc','Localidade'); 
     $this->form->addText('tel','Telefone'); 
     $this->form->addText('fax','Fax'); 
     $this->form->addText('email','E-mail*');   
     $this->form->addTextArea('msg','Mensagem*'); 
     $this->form->addSubmit('sub', 'Enviar »'); 

希望這可以讓你瞭解如何創建自己的表單框架。

注:我無法將調用鍊形式化,因爲每個'add [element]'方法都會返回創建的元素的實例。

0

我現在在各種項目中使用CakePHP或Zend_Form,而且我再也不會使用它了,但是幾年前,我寫了一個相對完整的表單庫,就像你正在討論的那樣,對於一個用處不大的框架,你從未聽說過。

無論如何,這是PHP4的代碼,但它被用於生產,併爲我們工作得很好。在這種情況下,表單類本身是Abstract,您繼承它並定義表單。

你用它來幫助您創建表單InputField類: http://pastebin.com/EP8ngv8E

的網絡表單類: http://pastebin.com/4kgsFFsZ

我不主張你真正嘗試使用任何的這個。首先,你必須刪除或模擬它擁有的所有其他依賴(並且它有很多,最重要的是它的外觀,錯誤和警告類用於錯誤處理的框架)。

但我確實認爲如果您對這個主題感興趣,可能對您很有意思。

+0

另外,就像我們大多數人一樣,我從後來就對我的代碼感到畏懼!許多事情只是PHP4而已但是例如,在方法頂部的方法文檔而不是PHPDoc ?!我在想什麼!!啊,這就是我猜想的進步的標誌:回顧並且知道你會做得更好現在。 – 2011-07-07 00:08:28