mvccore/ext-form

MvcCore - 扩展 - 表单 - 基于HTML5控件创建和渲染网页表单的表单扩展,用于处理和验证提交的用户数据,管理表单会话以保存默认值,管理用户输入错误,以及扩展和开发自定义字段和字段组。

v5.2.27 2024-09-04 08:20 UTC

README

Latest Stable Version License PHP Version


这不是包含所有表单字段类的包!
如果您只想快速创建一个表单,
请使用包含所有表单字段和验证器的mvccore/ext-form-all包!


MvcCore 扩展,包含基础表单和字段类,用于使用HTML5控件创建和渲染网页表单,处理和验证提交的用户数据,管理表单会话以保存默认值,管理用户输入错误,以及扩展和开发自定义字段和字段组。

此包不能独立存在,因为没有任何表单字段扩展(如:mvccore/ext-form-field-*),因此无法在您的表单实例中创建特定字段。如果您想使用所有字段和验证器,请使用扩展mvccore/ext-form-all而不是mvccore/ext-form。此扩展只是整个功能的一部分,以避免在小应用中包含过多的字段类代码。

安装

composer require mvccore/ext-form

然后您需要安装以下任何表单字段扩展:mvccore/ext-form-field-*

composer require mvccore/ext-form-field-text

表单可扩展包映射

  • mvccore/ext-form-all   - 主要的巨大扩展,包含所有子扩展以渲染网页表单,处理提交,管理字段、会话和错误,包含所有表单包的扩展。
       - 处理提交,管理字段、会话和错误,包含所有表单包的扩展。
  • mvccore/ext-form   - 仅包含基础表单和字段类的表单扩展。
  • mvccore/ext-form-field-text   - 字段扩展,包含文本、电子邮件、密码、搜索、电话、URL和textarea类型的输入字段。
  • mvccore/ext-form-field-numeric   - 字段扩展,包含数字和范围类型的输入字段。
  • mvccore/ext-form-field-selection   - 字段扩展,包含选择字段、国家选择、复选框、单选按钮和颜色。
  • mvccore/ext-form-field-date   - 字段扩展,包含日期、日期时间、时间、星期和月份类型的输入字段。
  • mvccore/ext-form-field-button   - 字段扩展,包含按钮字段和提交输入字段。
  • mvccore/ext-form-field-file   - 字段扩展,包含具有上传验证的文件输入类型。
  • mvccore/ext-form-validator-special   - 仅包含特殊文本和数字验证器的验证器扩展。

主要功能

  • 创建具有变量分配字段的动态表单
  • 所有HTML5字段和属性
  • 每个字段都内置了与其类型相对应的验证器
  • 自动/可定制的CSRF和XSS保护
  • 会话中管理错误消息
  • 默认或通过模板重定义表单
  • 默认或通过模板重定义任何自定义或内置字段
  • 非常可扩展的表单类和字段类
  • 非常可扩展的任何字段的支持javascripts
  • 翻译,会话数据管理
  • 多个提交按钮具有不同的/自定义的结果状态

字段

  • mvccore/ext-form中的内置字段
    • 基本的FieldFieldsGroup类,用于扩展任何控件以实现自定义功能
    • input:hidden
    • datalist
  • mvccore/ext-form-field-text中的扩展文本字段
    • input:text:password:email:search:tel:url
    • textarea
  • mvccore/ext-form-field-numeric中的扩展数值字段
    • input:number:range(滑块)和多个input:range
  • mvccore/ext-form-field-selection中的扩展选择字段
    • select(多选)
    • 国家select
    • input:checkbox
    • input:checkbox
    • input:radio(单选按钮,开关)
    • input:color
  • mvccore/ext-form-field-date中的扩展日期字段
    • input:date
    • input:datetime-local
    • input:time
    • input:week
    • input:month
  • mvccore/ext-form-field-button中的扩展按钮字段
    • input:button
    • input:reset
    • input:submit
    • input:image
    • button:button
    • button:reset
    • button:submit
  • mvccore/ext-form-field-file中的扩展文件字段
    • 具有多个选项和验证的input:file

验证器

每个表单控件都会根据类型自动配置验证器。

  • 每个字段和mvccore/ext-form中的内置验证器
    • 必填、只读、禁用...
    • 安全字符串(在响应中安全显示提交值时保持字符 - XSS保护)
  • mvccore/ext-form-field-text中的扩展文本字段
    • email - 检查电子邮件是否为有效格式
    • 最小和最大文本长度
    • password - 通过配置的规则检查密码强度
    • pattern - 通过pattern控制属性使用PHP preg_match
    • url(检查字符串是否为url)
    • tel(仅用于清除电话号码中不允许的字符)
    • ZIP代码(检查国际ZIP代码格式)
  • mvccore/ext-form-field-numeric中的扩展数值字段
    • number(整数或浮点数,最小值、最大值和步长)
    • range(最小值、最大值和步长)
  • mvccore/ext-form-field-selection中的扩展选择字段
    • checkbox - checked
    • 选项中的值(检查提交的值是否存在于选项中,对于选择、国家选择、复选框组和单选按钮)
    • 选定的最小/最大选项
    • 十六进制透明颜色
  • mvccore/ext-form-field-date中的扩展日期字段
    • date - 如果日期格式正确,并检查最小值、最大值和步长
    • datetime、time、week和month验证器是日期验证器的扩展
  • mvccore/ext-form-field-file中的扩展文件字段
    • 文件验证器用于检查上传文件(通过魔术字节等)中所有可能的内容
  • mvccore/ext-form-validator-special中的扩展特殊验证器
    • EU公司ID/VAT ID
    • 信用卡(仅检查数字校验和)
    • iban银行账户号码(仅检查数字校验和)
    • 十六进制数
    • IP地址(IPv4和IPv6格式检查)
    • 国际ZIP代码格式检查

所有功能介绍

  • 创建、渲染和提交动态创建的网页表单,无需指定任何静态模型类(如经典.NET MVC表单)
  • 实现了所有HTML5表单属性,所有HTML5字段及其HTML5和旧版属性
  • 每个字段都有其内置默认验证器,也可以定义任何其他或所有字段验证器
  • 自动/可定制的CSRF和XSS保护
    • 每个表单(GET/POST)都有自己的跨站请求伪造(CSRF)隐藏输入,包含token名称和token值,以检查表单是否由特定用户会话提交,而不是由任何外部攻击者JavaScript代码
    • 可以自行管理CSRF保护
    • 所有可能传递危险字符进行XSS攻击的字段都默认由XSS安全字符串验证器保护。可以移除此验证器并实现自己的保护
  • 错误消息 - 仅在表单提交时存储在会话中,自动渲染
  • 模板自动渲染或使用自定义模板
    • 自然渲染的表单将每个控件放在空div中
    • 渲染的自定义模板应包含任何内容,CSRF令牌将由 $form->RenderFormBegin(); 自动创建
    • 任何复杂的表单控件也可以有自己的自定义模板
    • 任何表单或控件模板都自动分配来自其局部 $this 上下文和通过控制器传递到表单的原始 $controller->View(在 __construct(); 中)的属性。
  • 可以扩展表单本身、任何字段、字段组或验证器,可以使用内置接口、抽象类和特质
  • 为任何字段类型提供自定义js/css资源
    • 可以在表单HTML体后立即渲染(默认)
    • 可以通过自定义渲染器或自定义响应附加脚本/解决方案以外部链接文件的方式渲染
    • 可以通过检出和扩展:"mvccore/ext-form-js" 来扩展内置的JavaScript
  • 翻译,会话数据管理
    • 每个可见表单都应通过配置的翻译器调用转换为表单实例
    • 从会话加载默认值或上一次提交的值
    • 可以在提交后选择性地清除会话
  • 多个提交按钮具有不同的/自定义的结果状态
    • 声明错误URL、成功URL(用于特殊开发者实现的上一级和下一级URL)
    • 可以为任何提交按钮定义自定义表单结果状态以识别下一步操作
  • 表单具有内置的语言属性(用于翻译器)和locale属性(用于高级字段和验证器)

示例

基本示例

在 'Contact:Default' 路由中初始化表单

$form = (new \MvcCore\Ext\Form($mvcCoreController))
	->SetId('newsletter')
	->SetAction(
		$mvcCoreController->Url('Contact:Submit')
	)
	->SetSuccessUrl(
		$mvcCoreController->Url('Contact:Submitted')
	)
	->SetErrorUrl(
		$mvcCoreController->Url('Contact:Default')
	);
$email = (new \MvcCore\Ext\Form\Email)
	->SetName('mail')
	->SetLabel('Your email:')
	->SetRequired();
$submit = (new \MvcCore\Ext\Form\SubmitButton)
	->SetName('submit')
	->SetValue('Send');
$form->AddFields($email, $submit);
$mvcCoreController->view->newsletterForm = $form;

在 'Contact:Default' 路由的模板中渲染表单

<body>
	<?php echo $this->newsletterForm; ?>
</body>

在 'Contact:Submit' 路由中提交表单

// ... form initialization again into var: $form 

// process all configured validators by: $form->Submit();
list($result, $data, $errors) = $form->Submit();

// if data has been submitted successfuly, 
// store user email somewhere in database:
if ($result == \MvcCore\Ext\Form::RESULT_SUCCESS) {
	// store user email somewhere by any custom model class (User):
	(new User())->SetEmail($data['mail'])->Save();
	// clear form session space to not display filled 
	// data by current user to another users
	$form->ClearSession();
}

// redirect user to configured success 
// or error url (by internal $form->Result property):
$form->SubmittedRedirect();