nibble / nibble-forms
PHP 表单库,用于生成和验证 HTML5 表单
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-14 12:46:47 UTC
README
Nibble Forms 2 是一个 PHP 表单类,允许开发者快速创建 HTML5 表单并验证提交结果。Nibble Forms 2 是原始的 Nibble Forms 类的演进,它遵循了一些 Nibble Forms 的关键原则;
-
简单实例化:Nibble Forms 2 可以不传递任何参数进行实例化,这意味着创建一个表单对象以添加字段可以像这样简单:
$form = \NibbleForms\NibbleForm::getInstance();
-
简单的表单字段调用:Nibble Forms 2 中的每个表单字段都可以通过仅传递名称和类型(或名称、类型和选择项,如果它是选择字段,如下拉列表)进行实例化。
这意味着只需一行代码即可设置所有 HTML5 标记和所有 PHP 验证方法。$form->addField('example_text_field', 'text');
-
灵活:Nibble forms 2 仍然允许开发者选择默认表单标记,添加额外字段属性,更改字段验证,使用自定义 HTML 标记表单,开启 HTML5 验证等等。
-
开箱即用的验证:Nibble Forms 2 中的每个表单字段都内置了标准验证。例如,电子邮件字段只接受有效的电子邮件等。
此外,很明显,在大型应用程序中使用原始的 Nibble Forms 时存在一些缺陷。这些缺陷是创建 Nibble Forms 2 的起点
-
属性数组:原始的 Nibble Forms 在每个表单字段上使用了多个参数,并且这些参数的顺序并不总是相同。这使得使用 Nibble Forms 进行开发变得缓慢,因为每个参数集都必须为每个表单字段记住或查找。Nibble forms 2 只有三组参数,字段名、字段类型和字段参数。字段参数始终是一组参数数组,这意味着不需要记住顺序。所有字段都有可以在数组中定义的标准参数(如
"required" => true
),一些(如选项字段)还可以定义额外的参数(如选择项数组)。 -
渲染单个表单元素:在原始的 Nibble Forms 中,每个字段都有一个方法来在其周围添加额外的 HTML 标记。当尝试自定义表单布局时,除了在字段周围添加 div 之外,这种方法会使布局变得非常混乱且经常出错。Nibble Forms 2 允许开发者渲染单个表单行(标签、字段和错误)甚至单个行的元素,以便他们可以使用所需的任何结构标记表单。
$form->renderRow('example_text_field')
-
PHP 命名空间:为了使代码更易于阅读,Nibble Forms 2 将每个字段放在自己的 NibbleForms\Field 命名空间文件中。存在一个自动加载器,以便可以轻松加载和扩展每个字段,并且开发人员可以创建新字段而无需篡改核心代码文件。
-
添加字段方法:这个函数需要两个原因;
- 原始的 Nibble Forms 使用魔法获取器和设置器来创建表单字段,当字段名也用作类变量时,这会失败。
- 由于命名空间,创建表单需要每次添加字段时都编写字段名称的命名空间,addField 方法使添加字段变得非常简单。
简单用法
每个在单个服务器请求中使用的表单都需要其自己的 Nibble Forms 实例,必须包含该类才能获取实例。
/* Require the Nibble Forms class */ require_once dirname(__FILE__) . '/Nibble/NibbleForms/NibbleForm.php'; /* Get an instance of the form called "form_one" */ $form = \Nibble\NibbleForms\NibbleForm::getInstance('form_one');
可以使用 addField 方法向表单实例中添加表单字段
/* Add field using 3 arguments; field name, field type and field options */ $form->addField('first_name', 'text', array('required' => false));
Nibble Forms 中预定义了多种表单字段类型,以下字段可以不提供字段选项数组即可添加
此外,还有4种选择样式字段,需要提供包含 "choices" 键的选项数组,例如:array('choices' => array('one', 'two', 'three'))
现在表单有了表单字段后,可以进行渲染
<? /* Render whole form */ ?> <?php echo $form->render() ?> <? /* Or render form elements individually with elements or whole rows */ ?> <?php echo $form->openForm() ?> <?php echo $form->renderHidden() ?> <?php echo $form->renderLabel('field_one') ?> <?php echo $form->renderField('field_one') ?> <?php echo $form->renderError('field_one') ?> <?php echo $form->renderRow('field_two') ?> <button type="submit">Submit</button> <?php echo $form->closeForm() ?>
最后,一旦数据提交,验证表单
/* In order to render errors, this method must be called before the form is rendered */ $form->validate();
一个示例表单实例(不进行渲染)可能看起来像这样
<?php /* Require Nibble Forms 2 */ require_once __DIR__ . '/Nibble/NibbleForms/NibbleForm.php'; /* Get Nibble Forms 2 instance called mega_form */ $form = \Nibble\NibbleForms\NibbleForm::getInstance('mega_form'); /* Text field with custom class and max length attribute */ $form->addField('text_field', 'text', array( 'class' => 'testy classes', 'max_length' => 20 )); /* Email field, not required and custom label text */ $email = $form->addfield('email', 'email', array( 'required' => false, 'label' => 'Please enter your email address' )); /* Email confirmation field which must match the value for email */ $email->addConfirmation('confirm_email', array( 'label' => 'Please confirm your email address' )); /* Radio button field with two options, first option has an additional attribute */ $form->addField('choice', 'radio', array( 'choices' => array( "one" => array('data-example' => 'data-attribute-value', 'Choice One'), "two" => "Choice Two"), 'false_values' => array("two") )); /* If the form is valid, do something */ if ($form->validate()) { echo "Form has validated"; }