学习编码PHP表单框架

| 您是否看过专门关于PHP表单框架的书,文章或教程?我不是在讨论整个框架,而只是在讨论处理形式的内容。现在,我已经使用Zend \的表单和Symfony \的表单,并且我正在学习如何构建框架,并停留在“如何构建表单框架”部分。 我已经尝试阅读Zend和Symfony的代码,但是我认为它太大而又复杂,没有任何解释。您是否有任何建议,或者也许有人介意解释表单框架的工作原理(或者更好的是,如何构建表单框架)? 到目前为止,我得到的是: 我需要创建一个抽象表单对象,因此可以从此处继承应用程序中的所有其他表单。该表单必须至少具有用于配置和保存的方法。 我们需要一个基本的小部件类(用于表单元素)和一个基本的验证器类,用于表单元素和小部件。 我们需要以某种方式连接所有表单。这是令我困惑的部分。如何连接所有这些元素? 有人可以给我一个提示吗?     
已邀请:
        我已经创建了一些东西来抽象化我的小型框架中的表单。 基本上我有两个主要课程。元素类和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] \'方法都返回所创建元素的实例,因此我无法将调用链接到表单。     
        我现在在各种项目上使用CakePHP或Zend_Form,但我自己再也不会使用它了,但是几年前,我为您使用的一个很少使用的框架编写了一个相对完整的表单库,就像您正在讨论的那样我从未听说过。 无论如何,这是PHP4代码,但已在生产中使用,对我们来说效果很好。在这种情况下,表单类本身是Abstract,您可以继承它并定义表单。 用于帮助您创建表单的InputField类: http://pastebin.com/EP8ngv8E Webform类: http://pastebin.com/4kgsFFsZ 我不主张您实际上尝试使用其中任何一种。首先,您必须删除或模拟它具有的所有其他依赖项(并且从外观上看,它具有许多用于错误处理的框架Error和Warning类)。 但是我确实认为,如果您对此主题感兴趣,那么这可能对您很有趣。     

要回复问题请先登录注册