2017-02-18 51 views
-1

現在得到的數據我呼籲來自控制器方法,返回的數據作爲JSON:如何在Laravel中添加響應HTTP數據?

return response()->json([$data]); 

我可以添加到這個響應全局數據?併合並這$data

比如我有全球$user對象,我想給遠在每個HTTP響應,以避免在每個方法如下條目:

return response()->json(["data" => $data, "user" => $user]); 
+0

你能解釋一下你期望的嗎?已經有答案了,它已經回答你的問題了嗎? –

+0

給出的答案之一是否回答你的問題? –

回答

2

創建自己的PHP類或函數來包裝Laravel與響應您的自己的數據。例如:

function jsonResponse($data) 
{ 
    return response()->json([ 
     'user' => $user, 
     'data' => $data, 
    ]); 
} 

然後,您可以撥打:

return jsonResponse($data); 

這是如何讓你的程序DRY只是一個簡單的例子。如果您正在創建一個您期望增長和維護的應用程序,請執行一些更類似this的操作。

+0

@mj你能檢查我的編輯。不確定它是否好,因爲這些問題似乎有點不清楚。 –

+0

@OmisakinOluwatobi是的,編輯作品。它基於這個問題實際上使封裝概念更清晰。 – ryannjohnson

+0

唯一的問題是,如果在這個函數中'$ user'變量實際上是全局的_being accessible_。我希望問題的主人能夠更多地瞭解...... –

1

@ rnj答案的替代方案是使用中間件。

https://laravel.com/docs/5.4/middleware#global-middleware

這將允許你勾,而不是在請求,而不是使用你可以決定你不想/需要在以後的輔助功能。

handle方法爲您的中間件可能類似於:

public function handle($request, Closure $next) 
{ 
    $response = $next($request); 

    $content = json_decode($response->content(), true); 

    //Check if the response is JSON 
    if (json_last_error() == JSON_ERROR_NONE) { 

     $response->setContent(array_merge(
      $content, 
      [ 
       //extra data goes here 
      ] 
     )); 

    } 


    return $response; 
} 

希望這有助於!

相關問題