telesto/symfony-form-ensure-string

Symfony表单类型扩展,用于将请求的表单类型中的非字符串数据替换为默认值。

dev-master 2014-05-14 11:59 UTC

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响应,因为这并不是(语义上)服务器错误。

可能的解决方案

  1. 对每个$form->submit()使用try-catch块来捕获UnexpectedTypeException(这是脏的)。
  2. 将您的表单包装在另一个表单中,该表单为您捕获异常并返回适当的错误。您可以使用自定义表单工厂来自动执行此操作。
  3. 使用表单类型扩展来修复非字符串值。

本项目提供第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