Я создал что-то, чтобы абстрагироваться от создания форм в моей маленькой структуре.
В основном у меня есть два основных класса. Класс элемента и класс element_container.
Большинство моих элементов расширяют класс элемента, за исключением формы, набора полей, 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 в основном такой же, за исключением того, что он может содержать другие элементы и поэтому имеет некоторую дополнительную обработку при рендеринге (в основном цикл, отображающий 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] возвращает экземпляр созданного элемента.