mvccore/ext-form-all

MvcCore - 扩展 - 表单 - 所有 - 使用HTML5控件创建和渲染Web表单的表单扩展,处理和验证提交的用户数据,管理表单会话以设置默认值,管理用户输入错误,以及扩展和开发自定义字段和字段组。

安装: 12

依赖项: 0

建议者: 0

安全: 0

星星: 1

关注者: 2

分支: 1

开放问题: 0

类型:元包


README

Latest Stable Version License PHP Version


这是一个仅连接所有表单字段类和验证器的元数据包!

如果您只是想快速创建一个表单,请使用此包。

如果您想创建只包含必要代码的精确应用程序,
请使用 mvccore/ext-form 包,并搭配您喜欢的
表单字段子包和验证器,如 (mvccore/ext-form-field-*)。


MvcCore 扩展,包含所有子扩展,用于创建和渲染Web表单,处理和验证提交的用户数据,管理表单会话以设置默认值,管理用户输入错误,以及扩展和开发自定义字段和字段组。

此包包含所有MvcCore表单和字段类,大约有130个*.php文件包含类、接口和特性。它可以不使用任何其他MvcCore表单子扩展。但如果你想要创建只包含应用程序所需代码的应用程序,你不想使用这个庞大的元数据包,而是使用基础表单包 (mvccore/ext-form) 和特定的字段包,如:mvccore/ext-form-field-*,以便在空表单实例中创建特定的字段。

安装

composer require mvccore/ext-form-all

表单可扩展包映射

如果您使用基础表单包 (mvccore/ext-form) 和特定字段包(如:mvccore/ext-form-field-*) 与MvcCore表单结合使用来构建只包含应用程序所需代码的应用程序,则需要此映射。
如果您使用此包 mvccore/ext-form-all,则不需要此映射。

主要特性

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

字段

验证器

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

  • 每个字段和mvccore/ext-form中的内置验证器
    • 必填、只读、禁用...
    • 安全字符串(保留字符以安全地显示在响应中提交的值 - XSS保护)
  • mvccore/ext-form-field-text中的扩展文本字段
    • 电子邮件 - 检查电子邮件是否有效
    • 最小/最大文本长度
    • 密码 - 通过配置的规则检查密码强度
    • 模式 - 通过pattern控制属性使用PHP preg_match
    • URL(检查字符串是否为URL)
    • 电话(仅用于清除电话号码中不允许的字符)
    • ZIP代码(检查国际ZIP代码格式)
  • mvccore/ext-form-field-numeric中的扩展数字字段
    • 数字(整数或浮点数,最小值、最大值和步长)
    • 范围(最小值、最大值和步长)
  • mvccore/ext-form-field-selection中的扩展选择字段
    • 复选框 - 已选中
    • 选项值(检查提交的值是否存在于选项中,用于选择、国家选择、复选框组和单选按钮)
    • 选择的最小/最大选项
    • 十六进制非透明颜色
  • mvccore/ext-form-field-date中的扩展日期字段
    • 日期 - 检查日期格式是否正确,并检查最小值、最大值和步长
    • 日期时间、时间、周和月验证器扩展自日期验证器
  • mvccore/ext-form-field-file中的扩展文件字段
    • 文件验证器检查上传文件的所有可能内容(通过魔数和更多)
  • mvccore/ext-form-validator-special中的扩展特殊验证器
    • 欧盟公司ID/VAT ID
    • 信用卡(仅检查数字校验和)
    • IBAN银行账户号码(仅检查数字校验和)
    • 十六进制数
    • IP地址(检查IPv4和IPv6格式)
    • 国际邮政编码格式验证

所有功能介绍

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

示例

基本示例

在'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();