telesto / symfony-form-ensure-string
Symfony表单类型扩展,用于将请求的表单类型中的非字符串数据替换为默认值。
dev-master
2014-05-14 11:59 UTC
Requires
- php: >=5.3.3
- symfony/form: ~2.4
- telesto/symfony-form-utils: *@dev
This package is not auto-updated.
Last update: 2024-09-28 16:36:15 UTC
README
Symfony表单类型扩展,用于将请求的表单类型中的非字符串数据替换为默认值。
问题
Symfony框架默认不保护您的应用程序免受表单中的类型错误。
如果有人将'[]'添加到表单输入名称中(使用firebug、opera dragonfly或类似工具),发送到您应用程序的数据将是一个数组而不是字符串,并且(很可能是)某些验证器将抛出Symfony\Component\Validator\Exception\UnexpectedTypeException,如果未捕获,将导致500内部服务器错误HTTP响应和'Uncaught PHP Exception'日志条目。
示例
name="form_name[fieldName]" (normal input name)
name="form_name[fieldName][]" (modified input name)
但您可能不希望这种错误出现在日志中,也不希望您的应用程序发送5xx响应,因为这并不是(语义上)服务器错误。
可能的解决方案
- 对每个
$form->submit()
使用try-catch块来捕获UnexpectedTypeException(这是脏的)。 - 将您的表单包装在另一个表单中,该表单为您捕获异常并返回适当的错误。您可以使用自定义表单工厂来自动执行此操作。
- 使用表单类型扩展来修复非字符串值。
本项目提供第3号解决方案。
用法
services:
form.type_extention.ensure_string:
class: Telesto\VendorExt\Symfony\Form\EnsureString\Type\FormTypeEnsureStringExtension
arguments:
- ['text', 'integer', 'hidden', 'number', 'percent', 'money'] # add non-standard types if you use them
tags:
- { name: form.type_extension, alias: form }
许可证:MIT