2017-04-25 61 views
0

我将一些json数据,在控制器的响应,我想一些信息添加到数据附加到JSON

在我DriversController延伸的ApicontrollerDriversController我要回上api调用的一些数据,我想到appent状态码信息以低于响应

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(); 
    } 
} 
+1

你的问题似乎有点不清楚。你能详细说明吗? – PaladiN

+0

@PaladiN谢谢你的时间,我已更新我的代码, –

+0

http://stackoverflow.com/questions/31131159/laravel-return-json-along-with-http-status-code 请参阅此问题。 –

回答

1

你只追加从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); 

我还没有测试的代码,但是这可能给你如何得到你想要的预期阵列响应一定的了解。

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

+0

你的解决方案在以期望的格式返回数据时工作,但是我在'ApiController'中遇到了问题,当我仅仅返回'$ this-> respondSuccess()时,我用'respond()'函数更新了代码;'我会得到错误'传递给Illuminate \ Routing \ Middleware \ ThrottleRequests :: addHeaders()的参数1必须是Symfony \ Component \ HttpFoundation \ Response的一个实例,在C:\ wamp64 \ www \ transport_mitra \ vendor \ laravel \ framework中调用\ src \照亮线路54上的\ Routing \ Middleware \ ThrottleRequests.php,并定义了' –

+1

那么,这是否与你一样?如果它帮助你,那很好:) – PaladiN

+0

请检查我的上面的评论,如果我使'respondWithMessage()'响应一个数组我的'respond()'给我错误 –