marvin255 / serviform
Requires
- php: >=5.6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.2
- phpmetrics/phpmetrics: *
- phpunit/phpunit: ^5.0|^7.0
- sebastian/phpcpd: *
- dev-master
- v2.0.0
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.13
- 1.1.12
- 1.1.11
- 1.1.10
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.12
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.5.8
- 0.5.7
- 0.5.6
- 0.5.5
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.11
- 0.4.10
- 0.4.9
- 0.4.8
- 0.4.7
- 0.4.6
- 0.4.5
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.2
- 0.1.1
- 0.1.0
- 0.0.2
- 0.0.1
- dev-feature/version-3.0
This package is auto-updated.
Last update: 2022-07-29 17:30:37 UTC
README
PHP 表单构造器。
安装
通过 Composer
在项目文件夹中运行命令
composer require marvin255/serviform:~1.2
通用
下载库存档并解压到项目中。请确保包含 Autoloader.php
。
require_once 'src/Autoloader.php';
基本用法
使用 \marvin255\serviform\helpers\FactoryFields
创建表单。每个元素都必须指定一个包含必需的 type
键的数组,或者设置一个实现 \marvin255\serviform\interfaces\Field
接口的对象。对于每个规则,必须指定一个如下所示的数组。
use marvin255\serviform\helpers\FactoryFields; $form = FactoryFields::initElement('form', [ 'name' => 'feedback', 'elements' => [ 'name' => [ 'label' => 'Name', 'type' => 'input', 'attributes' => [ 'class' => 'class', 'data-attribute' => 'some attribute', ], ], 'email' => [ 'label' => 'Email', 'type' => 'input', ], 'message' => [ 'label' => 'Message', 'type' => 'textarea', ], 'send' => [ 'label' => 'Send', 'type' => 'button', ], ], 'rules' => [ [['name', 'email', 'message'], 'required'], [['email'], 'regexp', 'regexp' => 'email'], ], ]);
将数据加载到表单中。验证表单字段。如果所有检查都通过,执行一些操作。
if ($form->loadData() && $form->validate()) { //get data form form $formData = $form->getValue(); //here is some action if form's data is valid, e.g. mail() or redirect }
渲染表单。
echo $form;
高级用法
要创建步骤式表单或在一个表单中插入另一个表单,将新的 form
元素设置为基本表单的一个元素。您可以将任何表单插入到任何其他表单中,没有嵌套限制。
use marvin255\serviform\helpers\FactoryField; $form = FactoryFields::initElement('form', [ 'name' => 'feedback', 'elements' => [ 'message' => [ 'type' => 'form', 'elements' => [ 'name' => [ 'label' => 'Name', 'type' => 'input', ], 'email' => [ 'label' => 'Email', 'type' => 'input', ], 'message' => [ 'label' => 'Message', 'type' => 'textarea', ], ], 'rules' => [ [['name', 'email', 'message'], 'required'], [['email'], 'regexp', 'regexp' => 'email'], ], ], 'address' => [ 'type' => 'form', 'elements' => [ 'country' => [ 'label' => 'Country', 'type' => 'input', ], 'city' => [ 'label' => 'City', 'type' => 'input', ], 'street' => [ 'label' => 'Street', 'type' => 'input', ], ], 'rules' => [ [['country', 'city', 'street'], 'required'], ], ], 'send' => [ 'type' => 'button', 'label' => 'Send', ], ], ]); if ($form->loadData() && $form->validate()) { //get data form form $formData = $form->getValue(); //here is some action if form's data is valid, e.g. mail() or redirect } echo $form;
要创建具有重复字段的表单,无需重复所有描述。只需使用 multiple
字段类型。
use marvin255\serviform\helpers\FactoryField; $form = FactoryFields::initElement('form', [ 'name' => 'feedback', 'elements' => [ 'message' => [ 'type' => 'form', 'elements' => [ 'name' => [ 'label' => 'Name', 'type' => 'input', ], 'email' => [ 'label' => 'Email', 'type' => 'input', ], 'message' => [ 'label' => 'Message', 'type' => 'textarea', ], ], 'rules' => [ [['name', 'email', 'message'], 'required'], [['email'], 'regexp', 'regexp' => 'email'], ], ], 'address' => [ 'type' => 'multiple', 'min' => 3, 'max' => 3, 'multiplier' => [ 'type' => 'form', 'elements' => [ 'country' => [ 'label' => 'Country', 'type' => 'input', ], 'city' => [ 'label' => 'City', 'type' => 'input', ], 'street' => [ 'label' => 'Street', 'type' => 'input', ], ], 'rules' => [ [['country', 'city', 'street'], 'required'], ], ], ], 'send' => [ 'type' => 'button', 'label' => 'Send', ], ], ]); if ($form->loadData() && $form->validate()) { //get data form form $formData = $form->getValue(); //here is some action if form's data is valid, e.g. mail() or redirect } echo $form;
在这种情况下,地址表单将渲染三次,具有不同的 name
参数。
字段
所有字段都必须实现 \marvin255\serviform\interfaces\Field
。要将新字段类型添加到工厂或更改旧类型,请使用 \marvin255\serviform\helpers\FactoryFields::setDescription
。
添加新字段类型。
use serviform\helpers\FactoryFields; FactoryFields::setDescription('new_field_type', [ 'type' => '\My\Awesome\Field', // required, string with the name of new type class that implements \marvin255\serviform\interfaces\Field 'label' => 'Default label', // we can set any default setting for each of newly created fields 'attributes' => [ 'class' => 'form-control', ], ]);
重新定义旧类型。
use serviform\helpers\FactoryFields; FactoryFields::setDescription('input', [ 'type' => '\My\Awesome\Input', // we can set new class for builtin field types 'label' => 'Default label', // we can set any default setting for each of newly created fields ]);
验证规则
所有验证规则都必须实现 \marvin255\serviform\interfaces\Validator
。要将新验证规则添加到工厂或更改旧规则,请使用 \marvin255\serviform\helpers\FactoryValidators::setDescription
。
添加新规则。
use serviform\helpers\FactoryValidators; FactoryValidators::setDescription('new_rule', [ 'type' => '\My\Awesome\Rule', // required, string with the name of new rule class that implements \marvin255\serviform\interfaces\Validator 'skipOnError' => true, // we can set any default setting for each of newly created rule ]);
重新定义旧规则。
use serviform\helpers\FactoryValidators; FactoryFields::setDescription('require', [ 'type' => '\My\Awesome\Require', // we can set new class for builtin rule 'skipOnError' => true, // we can set any default setting for each of newly created rules ]);