카테고리 없음

'Return value must be of type Symfony\Component\HttpFoundation\response' 오류 해결

백위한 2024. 5. 8. 19:24

개발 환경

 

Windows

PHP 8.2

Laravel 9.*

 

 

미들웨어를 이용해 게시글 작성자만 게시글 url에 접속할 수 있도록 작업하는 도중에 'Return value must be of type Symfony\Component\HttpFoundation\response' 오류가 발생했다.

 

번역하면 "반환 값은 Symfony\Compenent\HttpFoundation\Response 유형이어야 합니다" 라는 뜻이다.

 

 

오류가 발생한 코드는 다음과 같다.

 

<?php

namespace App\Http\Middleware;

use App\Models\Board;
use Illuminate\Http\Request;
use Closure;

class CheckBoardOwnership
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
     
    public function handle(Request $request, Closure $next): Response
    {
        $boardId = $request->route('board');

        $board = Board::find($boardId);

        if ($board && $board->user_id === auth()->id()) {
            return response()->view('board.show', compact('board'));
        }
        abort(403, 'Unauthorized');
    }
}

 

이 오류는 보통 Symfony 웹 애플리케이션에서 발생한다.

Symfony\Component\HttpFoundation\Response 클래스의 인스턴스를 반환해야 하는데 그러지 못했기 때문이다.

 

이 오류가 발생하는 주요 이유는 다음과 같다.

 

1. 컨트롤러 또는 라우트 콜백 함수에서 올바른 형식의 응답을 반환하지 않은 경우

Symfony 웹 애플리케이션에서는 컨트롤러나 라우트 콜백 함수가 Symfony\Component\HttpFoundation\Response 클래스의 인스턴스를 반환해야 한다. 이 클래스를 사용해 HTTP 응답을 생성하고 반환하는 방법이 권장된다.

 

2. 응답을 생성하는 과정에서 오류가 발생한 경우

응답을 생성하는 도중에 예외가 발생하여 올바른 형식의 응답을 반환하지 못한 경우일 수도 있다. 이럴 경우 응답을 생성하는 코드를 검토하고 오류를 수정해야 한다.

 

3. Symfony 버전 간의 호환성 문제

프로젝트에 사용된 Symfony 버전과 의존성 라이브러리 버전 간에 호환성 문제가 있을 수도 있다. Symfony 버전을 업데이트하거나 의존성 라이브러리를 업데이트하여 호환성 문제를 해결해야 한다.

 

 

내 경우는 2번 문제였다.

다음과 같이 메소드 반환 유형 Response를 삭제하자 문제가 해결되었다.

 

<?php

namespace App\Http\Middleware;

use App\Models\Board;
use Illuminate\Http\Request;
use Closure;

class CheckBoardOwnership
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
     
    public function handle(Request $request, Closure $next)
    {
        $boardId = $request->route('board');

        $board = Board::find($boardId);

        if ($board && $board->user_id === auth()->id()) {
            return response()->view('board.show', compact('board'));
        }

        abort(403, 'Unauthorized');

    }
}

 

 

 

참고

https://stackoverflow.com/questions/76644845/return-value-must-be-of-type-symfony-component-httpfoundation-jsonresponse

 

Return value must be of type Symfony\Component\HttpFoundation\JsonResponse,

I'm following the Lucid architecture in my application and facing an error in my Laravel application's LoginFeature class. When I try to execute the handle() method, I receive the following error m...

stackoverflow.com