В моем проекте есть это промежуточное программное обеспечение, которое иногда вызывает некоторые проблемы на моем рабочем сервере, и я не знаю почему, но только иногда, а не всегда, когда оно срабатывает. Это ошибка:
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
на своем действующем сервере, но опять же не знаю, сработает ли это, потому что не могу воспроизвести ошибку.
Может ли кто-нибудь помочь мне решить эту проблему и найти причину ошибки? Заранее спасибо.
Это не проблема, связанная с промежуточным программным обеспечением, это проблема на уровне маршрутизатора/контроллера. После завершения работы вашего промежуточного программного обеспечения вы выполняете несколько перенаправлений на своем маршрутизаторе/контроллере, и ваш return redirect();
, вероятно, пуст. Проверьте свои перенаправления после промежуточного программного обеспечения.
По сути, произошло то, что у меня есть return redirect(session('links'));
(пользовательский файл cookie, который я создал с URL-адресом с предыдущей страницы) более чем в одной функции и контроллере, поэтому, если срок действия файла cookie истек или если пользователь получил доступ к странице непосредственно по URL-адресу (при этом методе файл cookie не имеет предыдущей страницы), когда пользователь, например, нажимает кнопку «Сохранить», когда он обновляет событие*, в локальной среде появляется ошибка.
*Context: i have an event management project.
Чтобы решить мою проблему, я изменил свою функцию, я просто добавил if:
public function update(Request $request, $id)
{
$request->validate([
'id' => 'required',
'name' => 'required|max:30',
'capacity' => 'required',
]);
$input = $request->all();
$event= Event::find($id);
$event->update($input);
if (session('links')){
return redirect(session('links'));
}
return abort(419);
}
Да, это была проблема с контроллером, перенаправление в функции, которая появляется более чем в одной функции и контроллере.