Releases: ReallifeKip/ImmutableBase
Releases · ReallifeKip/ImmutableBase
v2.4.4
- 修復
toArray()判斷順序錯誤,導致包含 UnionType 屬性的物件使用toArray()時會一律拋錯狀況。
v1.0.4
- 修復 toArray 於無值時仍拋出錯誤 bug
v2.4.3
- 調整專案描述
v2.4.2
v2.4.1
v2.4.0
🎉 新功能
#[ArrayOf]現在支援 Enum 類型:可傳入 enum case 名稱或其底層 scalar 值,自動解析為對應 case。
v2.3.2
- 修正 UnionType 未嘗試所有型別就直接拋錯的問題
- 整合CHANGELOG
v2.3.1
- 修復 PHP 8.1 ~ 8.3 子類無法初始化父類 readonly 屬性導致非預期的繼承意外
v2.3.0
🎉 新功能
- 強化
#[ArrayOf]標註驗證:- 新增類型檢查,確保指定的類別是 ImmutableBase 的子類
- 支援傳入已實例化的物件或陣列資料
- 優化錯誤訊息提供更清楚的指引
✨ 功能改進
- 增強
toArray()方法:- 優化陣列處理邏輯,支援物件陣列的遞迴序列化
- 自動處理 ArrayOf 標註的物件陣列輸出
- 強制架構模式標註:
- 所有 ImmutableBase 子類必須使用
#[DataTransferObject]、#[ValueObject]或#[Entity]其中之一 - 更嚴格的屬性可見性檢查
- 所有 ImmutableBase 子類必須使用
🗑️ 正式移除
- 移除已棄用標註:
#[Relaxed]- 已完全移除#[Expose]- 已完全移除#[Reason]- 已完全移除
🔧 重大變更
- 所有子類現在必須使用架構模式標註
- ValueObject 和 Entity 新增支援 protected 屬性
- 移除所有舊版標註
📚 範例
#[DataTransferObject]
class OrderDTO extends ImmutableBase
{
#[ArrayOf(OrderItemDTO::class)]
public readonly array $items;
}
// 支援混合輸入
$order = new OrderDTO([
'items' => [
['name' => 'Product A', 'price' => 100], // 陣列會自動轉換
new OrderItemDTO(['name' => 'Product B', 'price' => 200]) // 已實例化也可接受
]
]);v2.2.0
🎉 新功能
- 新增
#[ArrayOf]標註:- 支援陣列屬性的自動實例化
- 可指定陣列元素的類別類型
- 自動將陣列數據轉換為指定類別的實例
- 提供錯誤驗證,確保類別名稱不為空
📝 更新
- 調整廢棄時程:
#[Relaxed]- 廢棄時程延後至 v2.3.0#[Expose]- 廢棄時程延後至 v2.3.0
📚 範例
#[DataTransferObject]
class UserListDTO extends ImmutableBase
{
#[ArrayOf(UserDTO::class)]
public readonly array $users;
}
// 使用方式
$userList = new UserListDTO([
'users' => [
['name' => 'Alice', 'age' => 30],
['name' => 'Bob', 'age' => 25]
]
]);
// 自動將每個陣列元素轉換為 UserDTO 實例