CodeIgniter 4(簡稱 CI4)是一個高效、靈活的 PHP 框架。在 CI4 的 Model 中,Callbacks 是一組特別的方法,它們會在數據庫操作(如新增、更新、刪除等)前後自動執行。在這篇文章中,我將解釋如何在 CI4 中使用 Model 的 Callbacks。

主要的 Callbacks

  • beforeInsert
  • afterInsert
  • beforeUpdate
  • afterUpdate
  • beforeDelete
  • afterDelete
  • beforeFind
  • afterFind

使用 Callbacks

定義 Callback 函數

首先,在 Model 中,你需要定義一個 Callback 函數。這個函數會接收一個名為 $data 的參數。

protected function uppercaseName(array $data)
{
    $data['data']['name'] = strtoupper($data['data']['name']);
    return $data;
}

註冊 Callback 函數

然後,將這個函數名稱添加到相應的 Callbacks 陣列中。

protected $beforeInsert = ['uppercaseName'];

完整範例

將以上兩步結合在一起,我們得到以下的 Model。

<?php namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table = 'users';
    protected $beforeInsert = ['uppercaseName'];

    protected function uppercaseName(array $data)
    {
        $data['data']['name'] = strtoupper($data['data']['name']);
        return $data;
    }
}

關於 $data

在 Callback 函數中,$data 是一個包含一些關鍵信息的關聯陣列。

  • data: 這是即將插入或更新的數據。
  • id: 當操作是更新或刪除時,這會包含被影響的紀錄的 ID。

範例

beforeInsertbeforeUpdate 的情境下:

$data = [
    'data' => [
        'name' => 'John',
        'email' => 'john@example.com'
    ]
];

如果是 beforeUpdatebeforeDelete,並且指定了 id

$data = [
    'id' => 1,
    'data' => [
        'name' => 'John',
        'email' => 'john@example.com'
    ]
];

總結

透過使用 Callbacks,你可以在數據庫操作前後插入自定義的邏輯,而不需要修改核心代碼。這不僅使代碼更乾淨,也提高了代碼的可維護性和可擴展性。希望這篇文章能幫助你更有效地使用 CodeIgniter 4 的 Model Callbacks。

最後修改日期: 2023 年 9 月 13 日

作者