Test project for media files management.
<?php
namespace Illuminate\Foundation\Http\Middleware;
use Closure;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
class TrimStrings extends TransformsRequest
{
/**
* The attributes that should not be trimmed.
*
* @var array<int, string>
*/
protected $except = [
'current_password',
'password',
'password_confirmation',
];
/**
* The globally ignored attributes that should not be trimmed.
*
* @var array
*/
protected static $neverTrim = [];
/**
* All of the registered skip callbacks.
*
* @var array
*/
protected static $skipCallbacks = [];
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
foreach (static::$skipCallbacks as $callback) {
if ($callback($request)) {
return $next($request);
}
}
return parent::handle($request, $next);
}
/**
* Transform the given value.
*
* @param string $key
* @param mixed $value
* @return mixed
*/
protected function transform($key, $value)
{
$except = array_merge($this->except, static::$neverTrim);
if ($this->shouldSkip($key, $except) || ! is_string($value)) {
return $value;
}
return Str::trim($value);
}
/**
* Determine if the given key should be skipped.
*
* @param string $key
* @param array $except
* @return bool
*/
protected function shouldSkip($key, $except)
{
return in_array($key, $except, true);
}
/**
* Indicate that the given attributes should never be trimmed.
*
* @param array|string $attributes
* @return void
*/
public static function except($attributes)
{
static::$neverTrim = array_values(array_unique(
array_merge(static::$neverTrim, Arr::wrap($attributes))
));
}
/**
* Register a callback that instructs the middleware to be skipped.
*
* @param \Closure $callback
* @return void
*/
public static function skipWhen(Closure $callback)
{
static::$skipCallbacks[] = $callback;
}
/**
* Flush the middleware's global state.
*
* @return void
*/
public static function flushState()
{
static::$neverTrim = [];
static::$skipCallbacks = [];
}
}