Skip to content

Releases: ReallifeKip/ImmutableBase

v2.4.4

10 Sep 03:00

Choose a tag to compare

  • 修復 toArray() 判斷順序錯誤,導致包含 UnionType 屬性的物件使用 toArray() 時會一律拋錯狀況。

v1.0.4

05 Sep 08:14

Choose a tag to compare

  • 修復 toArray 於無值時仍拋出錯誤 bug

v2.4.3

03 Sep 09:20

Choose a tag to compare

  • 調整專案描述

v2.4.2

03 Sep 07:50
ccda123

Choose a tag to compare

修正

  • 修復 ?array 傳入 [] 時,toArray() 輸出遺失該屬性問題(#2)。

v2.4.1

02 Sep 05:29

Choose a tag to compare

修正

  • 修復 #[ArrayOf] 導致 nullable property 傳入 null 或參數不存在時拋出錯誤;現已正確返回 null(#1)。

功能改進

  • ArrayOf 判斷流程更明確:先行處理 nullable 條件再進行陣列元素轉換,降低不必要的 array_map 呼叫。

v2.4.0

01 Sep 02:44

Choose a tag to compare

🎉 新功能

  • #[ArrayOf] 現在支援 Enum 類型:可傳入 enum case 名稱或其底層 scalar 值,自動解析為對應 case。

v2.3.2

31 Aug 06:00

Choose a tag to compare

  • 修正 UnionType 未嘗試所有型別就直接拋錯的問題
  • 整合CHANGELOG

v2.3.1

18 Aug 07:47

Choose a tag to compare

  • 修復 PHP 8.1 ~ 8.3 子類無法初始化父類 readonly 屬性導致非預期的繼承意外

v2.3.0

06 Aug 18:13

Choose a tag to compare

🎉 新功能

  • 強化 #[ArrayOf] 標註驗證
    • 新增類型檢查,確保指定的類別是 ImmutableBase 的子類
    • 支援傳入已實例化的物件或陣列資料
    • 優化錯誤訊息提供更清楚的指引

✨ 功能改進

  • 增強 toArray() 方法
    • 優化陣列處理邏輯,支援物件陣列的遞迴序列化
    • 自動處理 ArrayOf 標註的物件陣列輸出
  • 強制架構模式標註
    • 所有 ImmutableBase 子類必須使用 #[DataTransferObject]#[ValueObject]#[Entity] 其中之一
    • 更嚴格的屬性可見性檢查

🗑️ 正式移除

  • 移除已棄用標註
    • #[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

01 Aug 03:02

Choose a tag to compare

🎉 新功能

  • 新增 #[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 實例