Serialization Yii2-通过不同API处理模型的最佳方法
我从2个API中获得了一些产品信息(考虑添加第三个API)。我的应用程序有一个模块,其中包含如下界面(将在主应用程序中实现): interface ProductInterface { public function getId(); public function getSku(); /** @return GalleryImageInterface[] */ public function getImages(); ... } 接口产品接口 { 公共函数getId(); 公共函数getSku(); /**@return GalleryImageInterface[]*/ 公共函数getImages(); ... } 接口GalleryImage接口 { 公共函数getId(); 公共函数getUrl(); ... } 目标是以正确的方式处理API数据,以创建实现这些接口的产品列表。我发现的最简单的方法是在我的前端控制器中获取API的json数据,json_decode()将其转换为数组,然后将这些数组映射到模块的模型中,逐字段映射关系。 但若我想从API中添加一些额外的字段或添加另一个API作为源代码,那个么它似乎并没有什么害处Serialization Yii2-通过不同API处理模型的最佳方法,serialization,yii2,Serialization,Yii2,我从2个API中获得了一些产品信息(考虑添加第三个API)。我的应用程序有一个模块,其中包含如下界面(将在主应用程序中实现): interface ProductInterface { public function getId(); public function getSku(); /** @return GalleryImageInterface[] */ public function getImages(); ... } 接口产品接口 {
我将非常感谢从经验丰富的Yii2开发人员那里获得一些技巧。我将使用模型来代替接口,从大量分配中获得优势。 然后,我将在静态方法中获取这些属性,这样当您想要导入数据时,您就有了一个唯一的访问点 产品类别
use yii\base\Model;
class Product extends Model
{
$id;
$sku;
$images;
public static parseFromItemArray($ia) {
$obj = new self();
$obj->attributes = $ia;
$obj->images = GalleryImage::parseFromListArray($ia['images'];
return $obj;
}
public static parseFromListArray($la) {
$output = [];
foreach($la as $li)
{
$output[] = self::parseFromItemArray($ia);
}
return $output;
}
}
use yii\base\Model;
class GalleryImage extends Model
{
$id;
$url;
public static parseFromItemArray($ia) {
$obj = new self();
$obj->attributes = $ia;
return $obj;
}
public static parseFromListArray($la) {
$output = [];
foreach($la as $li)
{
$output[] = self::parseFromItemArray($ia);
}
return $output;
}
}
GalleryImage类
use yii\base\Model;
class Product extends Model
{
$id;
$sku;
$images;
public static parseFromItemArray($ia) {
$obj = new self();
$obj->attributes = $ia;
$obj->images = GalleryImage::parseFromListArray($ia['images'];
return $obj;
}
public static parseFromListArray($la) {
$output = [];
foreach($la as $li)
{
$output[] = self::parseFromItemArray($ia);
}
return $output;
}
}
use yii\base\Model;
class GalleryImage extends Model
{
$id;
$url;
public static parseFromItemArray($ia) {
$obj = new self();
$obj->attributes = $ia;
return $obj;
}
public static parseFromListArray($la) {
$output = [];
foreach($la as $li)
{
$output[] = self::parseFromItemArray($ia);
}
return $output;
}
}
当您从api获取json数据时,可以通过以下方式导入:
// $jsonString is data from api
// I'll use json_encode second parameter to specify that I want and associative array and not an object
// jsonData = json_encode($jsonString, true);
$products = Product::parseFromItemArray($jsonData);
将parseFromListArray放在共享模型中可能是一个好主意,这样您就不必每次都重写每个模型
此外,通过这种方式,您可以完全控制导入数据方法,并且不需要在类中添加新成员来添加要导入的新属性