将数据附加到 JSON

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

我正在返回一些

json
数据作为控制器中的响应,我想向

添加一些信息

在我的

DriversController
扩展中的
Apicontroller
中的
DriversController
中,我在
api
调用上返回一些数据,我想将状态代码信息附加到下面的响应中

if ($request->wantsJson()) {    
    return Response::json([
        'data' => [
            'user_details' => $agent_percentage,
            'dropdown_data' => [
                'employment_types' => $employment_types->all(),
                'roles' => $roles->all(),
                'vehicle_brands' => $vehicle_brands->all(),
                'vehicle_types' => $vehicle_types->all()
            ]
        ]
    ]);
}


   //to the above response
    return Response::json([
        $this->respondSuccess(), // i am append this information
        'data' => [
            'user_details' => $agent_percentage,
            'dropdown_data' => [
                'employment_types' => $employment_types->all(),
                'roles' => $roles->all(),
                'vehicle_brands' => $vehicle_brands->all(),
                'vehicle_types' => $vehicle_types->all()
            ]
        ]
    ]);

ApiControllre
我正在设置所有状态代码和消息

class ApiController extends Controller 
{

    protected $statusCode = 200;

    //getter status code
    public function getStatusCode() 
    {
        return $this->statusCode;
    }

    //setter status code
    public function setStatusCode($statusCode) 
    {
        $this->statusCode = $statusCode;
        return $this;
    }

    //failure messages
    public function respondFailure($message='Account is not active contact admin', $status='failure')
    {
        return $this->setStatusCode(400)->respondWithMessage($message, $status);
    }

    //success messages
    public function respondSuccess($message='Agent is active', $status='success')
    {
        return $this->setStatusCode(200)->respondWithMessage($message, $status);
    }


    //a layer of abstraction to avoide repetation
    public function respond($data, $headers = []) 
    {
        return Response::json($data, $this->getStatusCode(), $headers);
    }

    //get ststus code and message parse it for errors
    public function respondWithMessage($message, $status) 
    {
        return $this->respond([
            'status_code' => $this->getStatusCode(),
            'status' => $status,
            'message' => $message
        ]);
    }

} 

但我得到的回应与预期不同

 //expected result
 {
     "status_code": "200",
     "status": "success",
     "message": "User details with dropdown data",
     "data": {
       "user_details": {
          "id": 2017001,
          "name": "User Name",
          "email": "[email protected]",
        },
        "dropdown_data": {

        }
      }
    }

    //getting response
    {
      "0": {
        "headers": {},
        "original": {
          "status_code": 200,
          "status": "success",
          "message": "Agent is active"
        },
        "exception": null
      },
      "data": {
        "user_details": {
          "id": 2017001,
          "name": "User Name",
          "email": "[email protected]",
        },
        "dropdown_data": {

        }
      }
    }

中间件

<?php

namespace App\Http\Middleware;

use Closure;
use Response;
use App\Http\Controllers\ApiController;

class UserStatus extends ApiController
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if($request->user() === null)
        {
            return $this->respondFailure();
        }

        if($request->user()->isActive($request->user()))
        {
            return $next($request);
        }

       return $this->respondFailure();
    }
}
json laravel api object laravel-5.4
1个回答
3
投票

您仅附加来自

respondSuccess()
的响应,而不合并响应。

$this->setStatusCode(200)->respondWithMessage($message, $status);

对此回应:

return Response::json([
        $this->respondSuccess(), // i am append this information
        'data' => [
            'user_details' => $agent_percentage,
            'dropdown_data' => [
                'employment_types' => $employment_types->all(),
                'roles' => $roles->all(),
                'vehicle_brands' => $vehicle_brands->all(),
                'vehicle_types' => $vehicle_types->all()
            ]
        ]
    ]);

它给出的响应与您预期的响应不同。

要获得预期的响应,您需要执行以下操作:

public function respondWithMessage($message, $status) 
{
    return [
        'status_code' => $this->getStatusCode(),
        'status' => $status,
        'message' => $message
    ];
}

我只使用了数组而不是

$this->respond()
,因为你只有这条消息:

 "status_code": "200",
 "status": "success",
 "message": "User details with dropdown data",

对于响应类型,您可能需要将两个数组合并为一个。 请参阅 array_merge() 以获取更多理解。

$responseMessage= $this->respondSuccess();
$data = ['data' => [
        'user_details' => $agent_percentage,
        'dropdown_data' => [
            'employment_types' => $employment_types->all(),
            'roles' => $roles->all(),
            'vehicle_brands' => $vehicle_brands->all(),
            'vehicle_types' => $vehicle_types->all()
        ]
    ]
];

$responseArray = array_merge(responseMessage, data);
return Response::json($responseArray);

我尚未测试代码,但这可能会让您了解如何获得所需的预期数组响应。

如果我错了,任何人都可以建议编辑。

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