laravel踩坑记:空字符转null

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel踩坑记:空字符转null相关的知识,希望对你有一定的参考价值。

场景:手头的项目需要对外提供API服务,需要对请求数据进行签名校验。提交接口的数据会有‘‘空字符值存在,laravel的IlluminateFoundationHttpRequest接收到参数后,会将空字符强制转换为NULL,导致签名校验通不过。

经过一番努力,找到幕后黑手。
Illuminate/Foundation/Http组件中有定义这个中间件。
vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php

<?php

namespace IlluminateFoundationHttpMiddleware;

class ConvertEmptyStringsToNull extends TransformsRequest
{
    /**
     * Transform the given value.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return mixed
     */
    protected function transform($key, $value)
    {
        return is_string($value) && $value === ‘‘ ? null : $value;
    }
}

解决方法:
既然是中间件作祟,肯定在内核中有注册。找到内核注释该中间件就好。
app/Http/Kernel.php

class Kernel extends HttpKernel
{
    /**
     * The application‘s global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        AppHttpMiddlewareCheckForMaintenanceMode::class,
        IlluminateFoundationHttpMiddlewareValidatePostSize::class,
        AppHttpMiddlewareTrimStrings::class,
        //IlluminateFoundationHttpMiddlewareConvertEmptyStringsToNull::class,//会将‘‘转化为null
        AppHttpMiddlewareTrustProxies::class,
        IlluminateSessionMiddlewareStartSession::class,
    ];

以上是关于laravel踩坑记:空字符转null的主要内容,如果未能解决你的问题,请参考以下文章

[转]Spark 踩坑记:数据库(Hbase+Mysql)

Spark踩坑记——数据库(Hbase+Mysql)转

Mysql数据唯一约束与唯一索引案例总结及踩坑记(含NULL值与唯一约束唯一索引的搭配使用)

20191105踩坑记

VUE开发 mounted 踩坑记

记一次 Spring 事务配置踩坑记