Научитесь кодировать PHP Form Framework - PullRequest
6 голосов
/ 30 мая 2011

Вы когда-нибудь видели книгу, статью или учебное пособие, посвященное фреймворку форм PHP? Я не говорю о целой структуре, а просто о кусочках для обработки формы. На данный момент я использовал форму Zend и форму Symfony, и я узнал о том, как построить фреймворк, и застрял в части " как создать фреймворк формы ".

Я пытался прочитать код Zend и Symfony, но я думаю, что он слишком большой и сложный, без каких-либо объяснений. Есть ли у вас какие-либо рекомендации или, может быть, кто-то возражает объяснить, как работает фреймворк форм (или даже лучше, как создать фреймворк форм)?

Что у меня так далеко:

  1. Мне нужно создать абстрактный объект формы, чтобы все остальные формы в моем приложении могли наследоваться отсюда. Форма должна иметь как минимум методы для настройки и сохранения.
  2. Нам нужен базовый класс виджетов (для элементов формы) и базовый класс валидатора для элементов формы и виджетов.
  3. Нам нужно как-то связать все формы. Это та часть, которая смущает меня. Как я могу подключить все эти элементы?

Может кто-нибудь дать мне подсказку?

Ответы [ 2 ]

0 голосов
/ 07 июля 2011

Я использую CakePHP или Zend_Form сейчас в различных проектах, и я бы никогда больше не использовал это сам, но несколько лет назад я написал относительно полную библиотеку форм, как вы обсуждали, для малоиспользуемой среды, которую вы 'мы никогда не слышали о.

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

Класс InputField, который вы используете для создания форм: http://pastebin.com/EP8ngv8E

Класс веб-формы: http://pastebin.com/4kgsFFsZ

Я не рекомендую вам на самом деле пытаться использоватьлюбой из этого.Во-первых, вам придется удалить или эмулировать все другие зависимости, которые у него есть (и он имеет много, в первую очередь, по внешнему виду, классов ошибок и предупреждений, используемых для обработки ошибок).

Но я думаю, что если вам интересна эта тема, она может быть вам интересна.

0 голосов
/ 30 мая 2011

Я создал что-то, чтобы абстрагироваться от создания форм в моей маленькой структуре.

В основном у меня есть два основных класса. Класс элемента и класс 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] возвращает экземпляр созданного элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...