我最近开始研究一个 PHP/JS 表单类,它也将包含一个 SQL 表单构建器(例如,从 sql 和自动插入/更新构建简单的表单)。
我已经尝试了几个类(zend_form、clonefish、PHP Form Builder Class、phorms 等),但还没有遇到一个简单、可定制和完整的完整解决方案(服务器端和客户端验证,涵盖所有简单的 html 元素以及许多 dhtml 元素:排序、所见即所得、多文件上传、日期选择器、ajax 验证等)
我的问题是为什么某些“类”通过数组实现元素,而其他“类”通过适当的 OO 类调用实现元素。
例如。
Clonefish(流行的商业php类):
$config = Array(
'username' => Array(
'type' => 'inputText',
'displayname' => 'Username',
validation => Array(
Array(
'type' => 'string',
'minimum' => 5,
'maximum' => 15,
),
),
));
$clonefish = new clonefish( 'loginform', 'test.php', 'POST' );
$clonefish->addElements( $config, $_POST );
然后其他人例如。 Zend_Form
$form = new Zend_Form;
$username = new Zend_Form_Element_Text('username');
$username->addValidator(new Zend_Validate_Alnum());
$form->addElement($username);
我意识到 Zend_Form 可以通过类似于 clonefish 的数组传递元素,但为什么要这样做?
有什么好处吗?这似乎让事情变得更加复杂,尤其是在使用像 Komodo 这样合适的 IDE 时。
任何想法将不胜感激,因为我不想走得太远,并意识到使用数组添加元素有很大的好处(尽管添加元素并不是一项艰巨的任务)。
干杯
最佳答案
My question is why do some "classes" implement elements via an array and others via proper OO class calls.
为了方便。它不那么冗长,感觉不像编码,而更像配置,而且您不需要对 API 有更深入的了解。
顺便说一句,您还没有遇到一个简单、可定制和完整的完整解决方案的原因是它并不简单。表单,它们的验证和呈现是复杂的,特别是如果您想出于任何目的对其进行自定义。 ZF 的表单组件是如何正确解耦和分离所有关注点以获得最终可扩展表单构建器(包括通过 Zend_Dojo 或 ZendX_Jquery 的客户端代码)的一个很好的例子。但它们也是实现这一点所需的复杂性的一个很好的例子。即使使用方便的阵列配置,也很难让它们随心所欲,尤其是当您需要偏离默认配置和渲染时。
关于PHP/JS 表单类 - 数组 vs OO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3519952/