取而代之的是接口,我将使用Model来从大规模赋值中获得优势。 然后,我将使用静态方法获取这些属性,以便您在导入数据时拥有唯一的访问点。
产品类
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;
}
}
GalleryImage类
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);
可能做个好瘦的k把parseFromListArray放在共享模型中,所以你不必为每个模型重写每一次。
此外,通过这种方式,您可以完全控制导入数据方法,并且足够在类中添加新成员以添加要导入的新属性。
谢谢你,Yii2-way似乎没问题。 – showmeyourcode