Laravel 有超級方便的optional()助手。
我想將它與這樣的自定義模型屬性結合起來:
// this method is on the User model
public function getDataAttribute()
{
// this data comes from another service
$data = [
'one' => 1,
'two' => 2,
];
return optional($data);
}
所以我可以這樣使用它:
$user->data->one // 1
$user->data->two // 2
$user->data->three // null
但是,我也試圖通過執行以下操作來回傳整個陣列:
dump($user->data); // this should dump the internal $data array
但這將回傳一個帶有value屬性的 Illuminate\Support\Optional 實體。
Illuminate\Support\Optional {#1416 ▼
#value: {#2410 ▼
"one": 1
"two": 2
}
}
如果沒有給出“sub”引數(= $user->data 的子屬性),是否可以回傳原始的 $data 陣列?或者是否有可能在 getDataAttribute() 中檢測到子引數?
我希望很清楚我想要實作的目標。
uj5u.com熱心網友回復:
你所要求的無法實作。
我的建議是保持簡單并定義一個getter方法并傳遞您想要的陣列的鍵并從那里分別回傳您的資料,例如:
public function getData($key = null) {
$data = [
'one' => 1,
'two' => 2,
];
if (!$key) {
return $data;
}
return $data[$key] ?? null;
}
還要注意這個方法不再是一個屬性,這是因為 AFAIR,你不能將 args 傳遞給屬性方法。
閱讀材料
空合并運算子
uj5u.com熱心網友回復:
感謝lagbox將我推向正確的方向。我已經通過使用以下宏解決了這個問題:
Illuminate\Support\Optional::macro('toArray', function()
{
return (array) $this->value;
});
這樣我就可以使用以下方法訪問所有資料:
$user->data->toArray();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/392932.html
標籤:拉拉维尔
