Laravel 中间件错误:参数 #1 ($content) 必须是 ?string 类型,给出 Illuminate\Routing\Redirector

问题描述 投票:0回答:1

我的项目中有这个中间件,有时,它会给我的实时服务器带来一些问题,我不知道为什么,但只是有时,而不是每次都会触发它。这是错误:

Symfony\Component\HttpFoundation\Response::setContent(): Argument #1 ($content) must be of type ?string, Illuminate\Routing\Redirector given

错误是由

return $next($request);
触发的,下面是我的中间件:

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Event;
class EventOwner
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        if(isset($request["id_event"])){
            $event_id = $request["id_event"];
            $events = Event::where('id', $event_id)->where('user_id', Auth::user()->id)->first();
            if(isset($events)){
                if($events->id == $event_id){
                    return $next($request);
                }else{
                    $message = '401 - NOT AUTHORIZED';
                    return response(view('errors.not-auth', compact('message')), 401);
                }
            }else{
                $message = '401 - NOT AUTHORIZED';
                return response(view('errors.not-auth', compact('message')), 401);
            }
        }
    }
}

我已经将返回更改为

return redirect()->route('register');
,以返回重定向器对象,但什么也没发生。

我也尝试改进我的代码,我将代码更改为:

 public function handle(Request $request, Closure $next)
    {
            $event_id = $request["id_event"];
            if (!$event_id) {
               abort(404);
            }
            $events = Event::where('id', $event_id)->where('user_id', Auth::user()->id)->first();
            if ($events->isEmpty()) {
              $message = '401 - NOT AUTHORIZED';
              return response()->view('errors.not-auth', compact('message'), 401); // Create response with error view
            }
            return $next($request);
    }

虽然这是一个很好的改进,但我仍然不知道如何复制错误,或者是什么触发了错误。

我尝试在我的实时服务器中

php artisan config:clear
,但同样,我不知道它是否有效,因为我无法复制该错误。

有人可以帮我解决这个问题,并帮助我找到触发错误的原因吗?预先感谢您。

php laravel symfony middleware laravel-9
1个回答
0
投票

这不是中间件相关的问题,而是路由器/控制器级别的问题。中间件完成后,您可以在路由器/控制器上进行一些重定向并返回redirect();可能是空的。检查中间件后的重定向。

© www.soinside.com 2019 - 2024. All rights reserved.