前端那边说字段值为空字符串怎么获取变成null,这边奇了怪了,接口都开发一年多了,怎么今天反馈这个问题,这边也没加其它操作,然后这边查找了一下,发现App\HttpKernel.php中存在一个转null的中间件ConvertEmptyStringsToNull, 其实这个中间件处理的流程和咱们上次提的《Laravel关于TrimStrings请求参数去空格问题》去空格很几乎是一样的处理办法。
这边刚开始是从网上查找了有没有好一些的解决方法,尽量不为了一个接口删去这个全局中间件,从网上找的解决方法也都是说把这个中间件移出,还有看到withoutMiddleware,但是官网上说不支持作用全局中间件,然后这边就看了下方法的源码,发现主要是transform()方法处理,一看就和上次去空格一样,所以这边就重写了一下这个方法,然后再kernel.php替换下中间件
<?php
namespace App\Http\Middleware;
use \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull as ConvertEmptyStringsToNullMiddleware;
class ConvertEmptyStringsToNull extends ConvertEmptyStringsToNullMiddleware
{
/**
* 重写空字符串转null方法,$key和$value分别是请求参数的键和值,如果是对象的话则用.进行分级
* @param string $key
* @param mixed $value
* @return mixed
*/
protected function transform($key, $value)
{
// 这里的作用是全局不进行 my-data 中空字符串转null操作,如果my-data不是对象,则为my-data;如果my-data是对象,则为my-data.加上.
if(strpos($key,'my-data.') !== false) {
return $value;
}
return is_string($value) && $value === '' ? null : $value;
}
}