在日常开发中,我们通常会对请求提交的参数进行一些基本的处理,其中一项就是过滤掉提交参数的前后空白字符,避免出现异常。

但是在今天学习 Laravel 源码的过程中发现,Laravel 已经默认提供了一个全局中间件:TrimStrings 来替我们做这件事。

因此我们在使用 Laravel 开发过程中就无需额外考虑请求参数中的前后空白字符串了。

当然有的小伙伴会问,那如果参数是密码呢?密码中的前后空白字符是密码的合法组成之一,比如:“ 02045.com ”和“www.codesou.cn”应该是两个不同的密码。

关于这点 Laravel 也替我们想到了,在该中间件中忽略掉了 password 和 password_confirmation 两个参数。

附1: AppHttpMiddlewareTrimStrings::class 源码

<?php

namespace AppHttpMiddleware;

use IlluminateFoundationHttpMiddlewareTrimStrings as Middleware;

class TrimStrings extends Middleware
{
    /**
     * The names of the attributes that should not be trimmed.
     *
     * @var array
     */
    protected $except = [
        'password',
        'password_confirmation',
    ];
}

附2:IlluminateFoundationHttpMiddlewareTrimStrings 源码

<?php

namespace IlluminateFoundationHttpMiddleware;

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

    /**
     * Transform the given value.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return mixed
     */
    protected function transform($key, $value)
    {
        if (in_array($key, $this->except, true)) {
            return $value;
        }

        return is_string($value) ? trim($value) : $value;
    }
}