代码之家  ›  专栏  ›  技术社区  ›  Jeff Puckett

如何忽略Laravel的ConvertEmptyStringsToull中的特定属性?

  •  2
  • Jeff Puckett  · 技术社区  · 7 年前

    Laravel包括一个名为 ConvertEmptyStringsToNull

    使用中间件,请求 GET /somewhere?something something === null

    如果没有中间件,该请求将导致 something === ''

    如何对特定属性名称禁用它?

    TrimStrings 您会注意到它包含一个 except 所有物

    /**
     * The attributes that should not be trimmed.
     *
     * @var array
     */
    protected $except = [
        //
    ];
    

    ConvertEmptyStringsToull

    exemption

    • 到达/某处?某物 : 某物===空
    • GET /somewhere?exemption exemption === ''
    • GET /somewhere?everything : everything === null
    1 回复  |  直到 7 年前
        1
  •  2
  •   Community Egal    4 年前

    事实上,你可以扩展 TransformsRequest ConvertEmptyStringsToNull 也扩展了相同的类),然后重写 transform()

    我将不包括请求字段“abc” 设置为空 . 对不起 例如,我使用了一个数组,以便排除多个字段。

    //this is a middleware class I have removed `handle()` function leaving the default.
    class NinjaAuther extends TransformsRequest
    {
    
    /**
     * Transform the given value.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return mixed
     */
    protected function transform($key, $value)
    {
            if(is_string($value) && !in_array($key,  ['abc'], true)) {
                $value = $value === '' ? null : $value;
            }
    
        return $value;
        }
    }
    

    去除 中间件来自 $middleware 然后包括您自己的NinjaAuther中间件。

    enter image description here 那你就可以走了!所有请求都通过您的自定义中间件!您可以根据需要在单个组的中间件上使用它(以防您不想将其应用于所有请求)

    PS:我并没有仔细检查TransformRequest类,但我认为它应该是安全的,因为不管怎样,它被应用于内核内默认配置中的所有请求。php