前幾日詢問了關於api資源的一些雞肋的詢問,貌似並未得到有價值的結果。以下是連結:
問答:大家有沒有覺得 API 資源和 API 資源集合是雞肋一樣的存在
本來算放棄,只用最原始的函式封裝的辦法來做呢,但是每每想到這裡,心裡總是有個梗。於是,經過昨晚的認真分析。寫出來下面兩個關於資源的類的方法。一個是api資源,一個是api資源類。
實現的主要功能
1、api資源和api資源集合的後設資料返回值的封裝
2、api資源和api資源集合的輸出的資料篩選
篩選提供兩種方式,選擇和排除。
此舉僅僅是拋磚引玉之作,還有大家積極貢獻自己的好辦法。
api資源
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class CourseResource extends JsonResource
{
// 定義符合的欄位的輸出列表
protected $only = ['id', 'title', 'price'];
// 定義需要排除的欄位列表
protected $except = ['deleted_at', 'created_at', 'updated_at'];
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return resource_data($this->selectField($this->resource, 'only'));
}
/*
* 處理欄位的篩選符合的內容
* 如果是陣列需要對欄位帥選的話 可以這麼用
*/
private function selectField($data, $type){
// 選擇合適結果集
$field = $this->$type;
// 使用欄位篩選出符合的欄位
return collect($data)->$type($field);
}
}
api資源集合
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class CourseCollection extends ResourceCollection
{
// 定義符合的欄位的輸出列表
protected $only = ['id', 'title', 'price'];
// 定義需要排除的欄位列表
protected $except = ['deleted_at', 'created_at', 'updated_at'];
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
// 對返回值記性帥選處理
return resource_data($this->selectField($this->collection, 'except'));
}
/*
* 處理欄位的篩選符合的內容
* 如果是陣列需要對欄位帥選的話 可以這麼用
*/
private function selectField($data, $type){
// 對陣列進行迴圈的處理
$field = $this->$type;
return $data->map(function($item) use($type, $field){
return collect($item)->$type($field);
});
}
}
api返回方法封裝
/*
* 設定固定的返回值的格式
* $data 為返回的資料
* $code 為返回的狀態碼
* $msg 為返回的資訊
* $jsonp 是否設定為跨域訪問
*/
function resource_data($data=[], $code=200, $msg='success'){
return [
'code' => $code,
'msg' => $msg,
'data' => $data
];
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結