是否有一个经过良好测试且优选成熟的库,用于在PHP中创建表单,包括客户端(这是jQuery的用户)和服务器端验证?
理想情况下,表单可以从PHP类生成,也可以作为纯HTML编写并解析ala Agavi。然后,库将自动创建正确的jQuery钩子,以便包含的jQuery客户端验证可以运行。
我经常做的一项工作是对旧的联系表格进行一些修改,我希望将这项工作标准化,以便每次都可以使用相同的最佳实践代码。考虑到这一点,PHP类生成的HTML应该足够好,以便可以在需要的地方添加额外的CSS挂钩等。
感激地收到任何建议。
我一直在梳理并审查我发现的选项以及其他人在下面提出的建议,目前我会按照以下顺序对项目进行排序,以便从我对所有项目进行的少量测试和研究中获得质量他们。
我仍然不相信任何诚实的选择,我不知道为什么开始这些项目的人不会从一些坚实且经过良好测试的组件开始。例如,我会想到以下的组合:
为您提供良好稳定的基础,并在经过测试的组件之上创建一个漂亮的库。
此外,如果您对解析HTML而不是从PHP类生成HTML的库感兴趣,我找到了一个名为Minacl的项目。就像我在原始问题中提到的Agavi选项一样。
答案 0 :(得分:16)
您可以使用ValidForm Builder。它完全符合您的要求: 有了它,您可以在PHP中使用验证规则定义表单,并使用jQuery和客户端验证生成表单。
功能列表(取自他们的网站):
答案 1 :(得分:7)
2017年更新
Agile UI是一个PHP UI组件库(和atk4.3的继承者),包括:
所有组件都有一致且简单的PHP界面:
$form = new \atk4\ui\Form();
$layout->add($form);
$form->setModel(new Country($db));
如果您更喜欢CRUD,请使用\atk4\ui\CRUD
。 Agile UI还提供了添加自定义组件的工具。
与替代软件比较:
$form->render()
或整个网络应用的HTML。答案 2 :(得分:1)
我遇到的一个选项是jFormer,但它有一个非常短的历史记录,并且PHP代码不太理想,有一个包含多个类的大型3000行文件。它不采用模块化方法。
答案 3 :(得分:1)
在HTML_QuickForm2中运行客户端验证究竟出现了什么问题?
需要 quickform.js 文件才能运行。该文件随包一起安装,但不自动包含在表单输出中。我最近更新了the docs以使此问题更加明显。
自从你的问题以来,QF2还有几个版本,一些与JS相关的错误被压扁了。考虑给它另一个尝试:我们的目标是一个稳定的版本,现在很快就会有反馈。
答案 4 :(得分:0)
在查看PEAR存储库的同时,我注意到HTML_QuickForm2已经发布了一个新版本,现在也支持客户端验证。它虽然没有使用jQuery,但他们已经为这项工作编写了自己的JS框架。
答案 5 :(得分:0)
也许您可以使用Symfony框架。它提供模型 - 视图 - 控制器层和模型外的自动表单生成。有许多验证选项。但我认为集成JQuery客户端验证也需要进行一些修改。
答案 6 :(得分:0)
我偶然发现了一个名为jquery-ahm的jQuery插件。它将验证逻辑移动到服务器,但使用JavaScript在客户端执行它。在页面底部,您会看到表单验证的示例。
Html标记:
<form id="form" action="/a.form" method="post" class="ahm">
<p>Name</p>
<input name="name" id="name" value="" type="text">
<p>Email</p>
<input name="email" id="email" value="" type="text">
<p>Password</p>
<input name="password" id="password" value="" type="text">
<br><input value="Submit Form" type="submit">
</form>
PHP代码:
<?php
// catch errors
foreach (array("name", "email", "password") as $key) {
if (empty($_POST[$key])) {
$error["#$key/addClass"] = "error";
$error["#$key/after"] = "<span class="error">Please enter $key</span>";
}
}
// get response
if (!empty($error)) {
$reset["input.error/removeClass"] = "error";
$reset["span.error/remove"] = "";
$response = $reset + $error; // reset errors before applying new ones
} else {
$response["#form/replaceWith"] = "<strong>Form successfully submitted</strong>";
}
// return response
return $response;
?>
结果: