Symfony 8.2处理JSON数组字段:在PRE_SUBMIT中转换为文本并保留类型校验

酷婷同学_1516

酷婷同学_1516

2026-11-13

720人浏览

原创

symfony 8.2可给文本字段设置allow_array_submission=true,让pre_submit监听器先接收并转换json数组,再执行原来的字段类型处理。它只改变处理顺序,不会让texttype直接接受任意数组;监听器结束后仍为数组时,字段照常失败。以下用于php 8.4及以上的8.2开发版测试应用。

先定义需要转换的字段

use Symfony\Component\Form\Event\PreSubmitEvent;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormEvents;

$builder->add('tags', TextType::class, [
    'allow_array_submission' => true,
]);

例如接口输入tags为["symfony","php"],应用的现有模型却存储逗号分隔文本。这种转换应只针对明确需要的字段启用,不要把选项加到整个应用的所有文本字段。

Symfony官方数组提交转换示例

Symfony官方数组提交转换示例

在高于零的优先级中完成转换

$builder->get('tags')->addEventListener(
    FormEvents::PRE_SUBMIT,
    function (PreSubmitEvent $event): void {
        $value = $event->getData();
        if (!is_array($value)) {
            return;
        }
        foreach ($value as $tag) {
            if (!is_string($tag)) {
                return; // 保留数组,让后续类型检查拒绝它
            }
        }
        $event->setData(implode(',', $value));
    },
    10
);

优先级10高于零,使转换先于字段类型相关监听器。示例仅接受一维字符串数组;嵌套数组或其他元素不会被强行转成字符串。所有同字段PRE_SUBMIT监听器都应能够面对数组输入,不能假定前一个监听器必然已经处理成功。

JSON Toolkit
JSON Toolkit

JSON文件多功能工具。支持格式化、验证、压缩、键排序及点记法路径查询。零依赖。

下载

FormType文档中的allow_array_submission选项

FormType文档中的allow_array_submission选项

按接口原有提交路径验证

在原有JSON解码与表单submit流程中,分别提交字符串数组、普通字符串、嵌套数组,检查成功数据和字段错误。是否允许空数组、逗号出现在单个标签中,以及未提交字段是否保留旧值,仍需由接口的数据模型和业务规则决定;若本来就要存储数组,应选匹配该模型的表单类型而不是先拼成文本。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

12764

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

7321

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2255

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

4628

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

5334

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

4191

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

6097

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

4782

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

12522

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Symfony 官方文档
Symfony 官方文档

共0课时 | 0人学习

Composer手册
Composer手册

共0课时 | 0人学习

Symfony5【从0开始开发博客系统】
Symfony5【从0开始开发博客系统】

共120课时 | 16万人学习