4

我有以下类为我处理 JSON 响应:

<?php
namespace BulkTransactionalSMS\Http\Handlers\Response;

use Symfony\Component\HttpFoundation\Response;

class JsonResponseHandler implements ResponseHandlerInterface
{
    /**
     * @param string $message
     * @return Response
     */
    public function errorResponse(string $message): Response
    {
        return response()->json([
            'status' => 'error',
            'message' => $message
        ]);
    }

    /**
     * @param array $successDetails
     * @return Response
     */
    public function successResponse(array $successDetails = []): Response
    {
        $response = array_merge(['status' => 'success'], $successDetails);
        return response()->json($response);
    }
}

所有 JSON 响应都由此类处理,因为它是统一的且易于更改。我已经尝试过这个类,就像它一样,Response::json()并且两者都产生相同的结果。

JSON 标头被发回,这与 jQuery 处理响应有关。这是一个示例调用,我将返回:

// Example call
$jsonResponseHandler = new JsonResponseHandler();
return $jsonResponseHandler->errorResponse('This is not working');

// Returns this:
HTTP/1.0 200 OK
Cache-Control: no-cache, private
Content-Type:  application/json
Date:          Tue, 12 Mar 2019 06:15:28 GMT

{"status":"error","message":"This is not working"}

// Expected return:
{"status":"error","message":"This is not working"}

调用的路由(通过 Ajax)设置如下:

Route::post('/upload-file', 'UploadController@uploadFile');

这就是目标函数的样子:

/**
 * @param Request $request
 * @return Response
 */
public function uploadFile(Request $request)
{
    $fileHandler = new FileUploadHandler(
        new MessagesRepository(new Message()),
        new JsonResponseHandler(),
        new Hasher()
    );
    return $fileHandler->uploadFile($request);
}

为什么它会返回正文中的标题,我该如何解决?

编辑 1

这是FileUploadHandler.php

4

1 回答 1

8

当我浏览我为 FatBoyXPC 上传的文件时,我看到我对该函数的类型转换是string. 这就是为什么它坏了。这是我修复它的方法:

public function uploadFile(Request $request): string
{
    // do stuff
}

它应该是:

public function uploadFile(Request $request): \Symfony\Component\HttpFoundation\Response
{
    // do stuff
}
于 2019-03-12T07:36:12.860 回答