nibble/nibble-forms

PHP 表单库,用于生成和验证 HTML5 表单

dev-master 2014-11-12 14:21 UTC

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";
}