programing

Larabel 5 컨트롤러가 JSON 정수를 문자열로 전송

magicmemo 2023. 3. 12. 10:40
반응형

Larabel 5 컨트롤러가 JSON 정수를 문자열로 전송

개발 서버에서 Larabel 5 컨트롤러로부터의 JSON 응답은 올바른 유형의 데이터를 표시합니다.

imdb_rating: 7.6
imdb_votes: 6271

그러나 프로덕션 서버에서는 JSON 응답이 문자열로 반환됩니다.

imdb_rating: "7.60"
imdb_votes: "6271"

개발 및 운영 모두 동일한 버전의 PHP가 설치되어 있습니다(5.6.11-1).

이 동작의 원인이 무엇인지에 대한 의견이 있습니까?

나도 같은 문제에 부딪혔어!보다 적절한 솔루션을 찾고 계신 분들을 위해 Archent 모델의 속성을 확인해 보시기 바랍니다.

승인된 솔루션은 작동하지만 변환하지 않을 수 있는 필드도 변환합니다.당신의 웅변 모델에 이것을 추가하는 것을 추천합니다.

protected $casts = [ 'imdb_rating' => 'float', 'imdb_votes' => 'integer' ];

이렇게 하면 모델 개체에서 직접 값이 변환되므로 여러 끝점을 업데이트할 필요가 없습니다.나처럼 다른 사람들에게 도움이 됐으면 좋겠어!

네이티브 데이터 유형을 지원하는 MySQL Native Driver를 사용해야 합니다.

MYSQLI_OPT_를 설정하여 정수를 변환하고 열을 PHP 번호로 되돌릴 수 있습니다.INT_AND_FLOAT_NATIVE 연결 옵션(mysqlnd 라이브러리를 사용하는 경우).설정된 경우 mysqlnd 라이브러리는 결과 집합 메타 데이터 열 유형을 확인하고 PHP 데이터 유형 값 범위가 허용하는 경우 숫자 SQL 열을 PHP 숫자로 변환합니다.예를 들어 SQL INT 열은 정수로 반환됩니다.

MySQL 클라이언트 라이브러리는 모든 필드를 문자열로 반환합니다.

또 다른 해결책은 json_encode 옵션을 사용하는 것입니다.JSON_NUMERIC_CHECK.

예를 들어 다음과 같습니다.

return response()->json(["foo" => "bar"], 200, [], JSON_NUMERIC_CHECK);

저도 같은 문제가 발생했습니다.Larabel은 제가 공유 호스팅에 게시한 후 모든 수치 데이터를 문자열로 반환하고 있었습니다.하지만 로컬 호스트에서는 모든 것이 잘 작동하고 있습니다.그래서 이 해결책을 찾았습니다.

Goto cPanel --> PHP 버전 선택 --> 확장 탭

그런 다음 pdo_model을 끄고 nd_pdo_model 확장을 체크합니다.cPanel 확장 리스트의 다음 스크린샷을 참조해 주세요.

로컬 호스트와 공유 호스팅 서버의 phpInfo를 비교하여 이 솔루션을 찾았습니다.변경 전후의 phpInfo 페이지의 다음 2개의 스크린샷을 참조하십시오.

수정 전

수정 후

David Domain의 답변에 감사드리며, 이 솔루션을 찾을 수 있게 되었습니다.

제 답변이 누군가에게 도움이 되었으면 좋겠어요.

다음과 같이 타이프캐스팅을 사용하여 정수를 반환할 수 있습니다.

return (int)Post::find(1)->id;

이것도 도움이 될 것 같아!라라벨 v9.x를 사용하고 있습니다.

함수를 BaseController에 배치합니다.

class Controller extends BaseController {
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public static function json($json) {
        return response()->json($json, 200, [], JSON_NUMERIC_CHECK);
    }

}

이제 모델 또는 사용하는 모든 항목에서 다음을 수행합니다.

return self::json($all);

언급URL : https://stackoverflow.com/questions/31527050/laravel-5-controller-sending-json-integer-as-string

반응형