franzwegener/quantumforms

QuantumForms 是一个可定制的 FormBuilder,它在前后端使用相同的验证器。

dev-master 2016-08-28 09:17 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:09:31 UTC


README

Github made-in Build Status Coverage Status

QuantumForms 是一个易于定制的 FormBuilder,它在前后端使用相同的验证器。

功能

  • 独立:无依赖,因此它是框架无关的,无需依赖管理
  • 易于使用和扩展
    • 通过向 Validators 目录添加类来添加验证器(所有验证器包括前端和后端部分)
    • 通过向 JsErrorNotifiers 添加 js-closure 来添加 JavaScript 表单错误处理程序
    • 通过向 FormElementsDirectory 添加类来添加新的表单元素类型
    • 通过向 Forms 目录添加来交换表单构建器本身
  • 低带宽(仅将您使用的验证器传输到客户端)
  • PSR4

安装

使用 composer 安装 QuantumForms 非常简单

composer require franzwegener/quantumforms

或者,如果您的项目不使用 composer(QuantumForms 没有任何依赖,因此不需要 composer!),您只需包含并注册自动加载器。

require_once $quantumFormsRootPath.'/Autoloader.php';
$loader = new Autoloader();
$loader->register();

使用方法

表单定义

1). 实例化您的表单

$form = new Form('GET', '/desired/form/action.php', new Alert());

2). 定义您的表单元素,并将它们添加到您的表单中。这假设您已将表单绑定到 $form 变量。

$ageElement = new TextInput('age');
$ageElement->setValidators([new Integer()]);
$form->addElement($ageElement);

$nameElement = new TextInput('name');
$nameElement->setValidators([new Alphanumeric()]);
$nameElement->setAttributes(['class' => 'form-control', 'id' =>'the-name-field']);
$nameElement->setHtmlBefore('<div class="border">');
$nameElement->setHtmlAfter('<p>Some text</p></div>');
$form->addElement($nameElement);

$submitElement = new Submit('submit');
$form->addElement($submitElement);

表单渲染

3). 将表单对象注入到您的视图中

<html>
	<head>
		<?= $form->renderJavascript(); ?>
	</head>
	<body>
		<?= $form->renderHtml(); ?>
	</body>
</html>

扩展

扩展 QuantumForms 允许您向表单添加更多元素。

额外元素

1). 将新 FormElement 名称的文件添加到 /src/FormElements 目录 中,例如 src/FormElements/Example

一个示例扩展可能看起来像这样

namespace QuantumForms\FormElements;

/**
 * Example FormElement
 */
class Example extends AbstractFormElement implements \Quantumforms\FormElementInterface
{
    /**
     * (non-PHPdoc)
     * @see \QuantumForms\FormElements\AbstractFormElement::render()
     */
    public function render()
    {
        $attributes = $this->getAttributesString();
    	return $this->htmlBefore.'<example '.$attributes.'/>'.$this->htmlAfter;
    }
}

请确保您在测试目录中添加了您的元素测试,/tests/FormElements/Example.php

如果您想将您的元素贡献回 QuantumForms 项目,请考虑提交包含您的更改的 pull request。

添加在表单错误时调用的 JavaScript 方法

将 JsErrorNotifier 名称的文件添加到 /src/JsErrorNotifiers 目录 中,例如 src/JsErrorNotifiers/Example

namespace QuantumForms\JsErrorNotifiers;

/**
 * Example JsErrorNotifier
 */
class Example implements \QuantumForms\JsErrorNotifierInterface
{
	public function getJsErrorNotifier()
	{
	    return 'function (elementName, validatorName){
    	       //do something
    	    }';
	}
}

将您的 JsErrorNotifier 的测试添加到 /tests/JsErrorNotifiers/Example.php

额外验证器

将验证器名称的文件添加到 /src/Validators 目录 中,例如 src/Validators/Example

namespace QuantumForms\Validators;

use QuantumForms\Validator;
use QuantumForms\ValidatorInterface;
/**
 * Example Validator
 */
class Example extends AbstractValidator implements ValidatorInterface
{

    /**
     * @return bool
     */
    public function validate($input)
    {
        $bool = some_validation($input);
        return $bool;
    }

    /**
     * @return string
     */
    public function getJavascriptValidator()
    {
        return 'function (input) {
                    bool = some_validation(input);
                    return bool;
                }';
    }

}

将您的验证器的测试添加到 /tests/Validators/Example.php

帮助与支持

此项目不带任何特定的支持计划,但我绝对喜欢在可能的情况下提供帮助。如果您遇到任何问题,请随时告诉我。只需 打开一个问题,我会尽力解决。