在 Web 應用開發中,數據驗證是一個重要的環節。在 CodeIgniter 4 (CI4) 中,提供了強大的驗證工具,允許開發者使用內置的驗證規則,同時也支持創建自定義驗證規則。本文將指導您如何在 CI4 中創建一個自定義驗證規則,用於檢查某個值是否存在於指定的資料表中。
創建自定義驗證規則
首先,我們需要在 App\Validation
目錄下創建一個自定義驗證類,例如 MyRules.php
。
namespace App\Validation;
use CodeIgniter\Database\ConnectionInterface;
use CodeIgniter\Validation\ValidationInterface;
class MyRules
{
protected $db;
public function __construct(ConnectionInterface &$db = null, ValidationInterface &$validation = null)
{
$this->db = $db ?? \Config\Database::connect();
}
public function exists($value, string $field, array $data, string &$error = null): bool
{
$parts = explode('.', $field);
if (count($parts) !== 2) {
return false;
}
[$table, $field] = $parts;
$row = $this->db->table($table)->where($field, $value)->get()->getRowArray();
return (bool) $row;
}
}
在這個類中,我們定義了一個名為 exists
的方法,它將檢查指定資料表的指定欄位中是否存在給定的值。
配置自定義驗證規則
接著,需要在 App\Config\Validation.php
中加入我們的自定義規則類。
namespace Config;
class Validation
{
public $ruleSets = [
// 其他內置規則
\App\Validation\MyRules::class,
];
// ...
}
使用自定義驗證規則
在控制器中,我們可以如下使用這個自定義規則來驗證輸入:
public function project_create(){
$rules = [
'ad_project_name' => 'required',
'advertiser_id' => [
'rules' => 'required|exists[advertiser.advertiser_id]',
'errors' => [
'required' => '廣告主ID為必填',
'exists' => '廣告主ID不存在'
]
]
];
if (!$this->validate($rules)) {
return $this->errorResponse($this->validator->getErrors(), 400);
}
// ...
}
在這裡,我們為 advertiser_id
欄位設定了兩個規則:required
和 exists[advertiser.advertiser_id]
。對於 exists
規則,我們還定義了一個自定義的錯誤訊息。
結論
通過上述步驟,我們在 CodeIgniter 4 中成功創建了一個自定義驗證規則,用於檢查資料表中某個欄位的值是否存在。這種方法增加了驗證過程的靈活性和可重用性,使我們能夠根據具體的應用需求更加精確地控制數據驗證過程。