You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:45:37