2017-04-25 66 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()'給我錯誤 –