取而代之的是接口,我將使用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