Laravel自定义中间件在Livewire中无法忽略指定字段求助
Laravel自定义Trim中间件在Livewire中忽略指定字段失效问题
我在Laravel中开发了自定义的TrimStrings2中间件,继承自TransformsRequest,并设置protected $except = ['current_password', 'password', 'password_confirmation']。常规HTTP请求场景下,该中间件能正常忽略这些字段的首尾空格处理,但在Livewire组件提交的字段中,这个忽略规则完全不生效。
官方自带的\App\Http\Middleware\TrimStrings::class中间件却能在Livewire中正常生效,正确忽略$except里的字段。我完全复制了官方TrimStrings类的实现逻辑(包括skipWhen方法、handle方法的回调判断,以及自定义的transform处理逻辑),但问题仍然没有解决。
自定义中间件代码如下:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Foundation\Http\Middleware\TransformsRequest; class TrimStrings2 extends TransformsRequest { protected $except = [ 'current_password', 'password', 'password_confirmation', ]; protected static $skipCallbacks = []; public function handle($request, Closure $next) { foreach (static::$skipCallbacks as $callback) { if ($callback($request)) { return $next($request); } } return parent::handle($request, $next); } protected function transform($key, $value) { if (in_array($key, $this->except, true) || !is_string($value)) { return $value; } return preg_replace('~^[\s]+|[\s]+$~u', '', $value) ?? trim($value); } public static function skipWhen(Closure $callback) { static::$skipCallbacks[] = $callback; } }
内容的提问来源于stack exchange,提问作者Watheq Alshowaiter
相关产品推荐
相关产品推荐

