2013-03-18 74 views
1

我不想使用已經完成的在PHP中構建表單的庫。我想用自己的設計模式寫自己的作品。我新設計模式,所以我需要知道哪種設計模式最適合在PHP中動態構建表單。使用哪種設計模式動態構建表單。 PHP

例如到目前爲止,我得到的東西,如:

class FormBuilder { 
    private $formName; 
    private $formAttributes; //array('ID' => ?, 'Classes' => array(?,?) ... 
    private $formStyle; //Css styling of form 
    private Label $labels; //a collection of label objects holding bunch labels 
    private Input $inputs; //a collection of input objects holding bunch inputs 

    /* constructor to initialize everything */ 


    /* GET/SET methods for each of the above private variables */ 

    .... 

    public function generateHTML() { 
     //takes above information and builds HTML and returns html 
    } 
} 

我現在的問題是,我需要爲每個標籤的對象,併爲每個輸入的對象。 Howerver我可能需要有一個對象或其他表單元素。最好的辦法是用這個代替每個班都會使用工廠模式

任何人都可以建議FormBuilder和圖案設計模式用於標籤/輸入或如何標籤和輸入合併成一個類標識爲標籤或輸入或文本域等等

+0

爲什麼要爲標籤和輸入使用不同的類?您可以簡單地在輸入對象上設置「標籤」屬性。您只需在呈現控件及其相關標籤時使用該屬性。 – 2013-03-18 19:01:40

+0

我想將Input,Label,TextArea和其他表單元素類合併爲一個,這樣我就不必有束類。不知道要使用哪種模式 – GGio 2013-03-18 19:04:02

+1

由於您在問題中提到了「構建表單」。最好的設計模式將是建設者模式http://sourcemaking.com/design_patterns/builder/php/1#code – Bart 2013-03-18 19:16:30

回答

3

您可以使用建造者模式。
http://sourcemaking.com/design_patterns/builder/php/1#code

這裏是一個非常簡單的例子。

<?php 

class FormBuilder 
{ 
    private $elements = array(); 

    public function label($text) { 
     $this->elements[] = "<label>$text</label>"; 
     return $this; 
    } 

    public function input($type, $name, $value = '') { 
     $this->elements[] = "<input type=\"$type\" name=\"$name\" value=\"$value\" />"; 
     return $this; 
    } 

    public function textarea($name, $value = '') { 
     $this->elements[] = "<textarea name=\"$name\">$value</textarea>"; 
     return $this; 
    } 

    public function __toString() { 
     return join("\n", $this->elements); 
    } 
} 

$b = new FormBuilder(); 
echo $b->label('Name')->input('text', 'name')->textarea('message', 'My message...'); 

輸出

<label>Name</label> 
<input type="text" name="name" value="" /> 
<textarea name="message">My message...</textarea> 
+0

看起來不錯,我會試試看,謝謝 – GGio 2013-03-18 19:33:13

0

這看起來不錯,但是這不會成爲動態表單幫助。動態表單就像輸入依賴於其他輸入元素或用戶動態添加新元素一樣。

每個元素都應該有獨立的類,通過它可以實現活力。應該有一個由輸入類擴展的抽象元素類。另外,應該有一個包含特定輸入對象和標籤的字段類。

即將發送代碼.......