2013-03-18 3 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

Зачем вам использовать разные классы для ярлыка и ввода? Вы можете просто установить свойство «label» на свой входной объект. Все, что вам нужно сделать, это использовать это свойство при рендеринге вашего управления и связанной с ним метки. –

+0

Я хочу комбинировать классы Input, Label, TextArea и другие классы элементов в одном, чтобы у меня не было классов сгустка. Не знаете, какой шаблон использовать – GGio

+1

Поскольку вы упомянули «форму сборки» в своем вопросе. Лучшим шаблоном проектирования будет шаблон Builder http://sourcemaking.com/design_patterns/builder/php/1#code – Bart

ответ

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

0

Это выглядит хорошо, но это не будет полезно для динамических форм. Динамические формы, например, когда вход зависит от другого элемента ввода или пользователя, динамически добавляет новый элемент.

Для каждого элемента должен быть отдельный класс, благодаря которому может быть достигнут динамизм. Должен быть класс абстрактных элементов, который расширяется входными классами. Кроме того, должен быть класс поля, который содержит определенный входной объект и его метку.

Скопируйте код в ближайшее время .......

Смежные вопросы