laravel 我想做一个在Livewire的某些领域不起作用的中间件

xzabzqsa  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(87)

我用Laravel做了一些中间件,它们在受保护的$except =['password']下也能正常工作;忽略具有except数组的字段。
问题仅在于livewire组件中的字段,它们工作并且不忽略这些字段。
我找到了这个官方的\App\Http\Middleware\TrimStrings::class,中间件可以很好地与livewire组件一起工作,并且可以忽略$except '字段。
我尝试复制TrimStrings类实现以了解我错过了什么,但不幸的是,问题仍然存在:$except '字段不会被忽略。
这是我的TrimStrings类的副本实现:

<?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;
    }
}
wkyowqbh

wkyowqbh1#

改变这个

if (in_array($key, $this->except, true) || !is_string($value)) {

到这个

if (!in_array($key, $this->except, true) && is_string($value)) {

app/Http/Kernel.php

protected $middleware = [
    \App\Http\Middleware\TrimStrings2::class,
];

相关问题