
CodeIgniter 3 で bool 値をバリデーションチェックする
公開日時: 2022/10/03 04:52:42
解決したいこと
CodeIgniter 3 で bool 値のバリデーションチェックをしたい。
結論
必須入力等を考慮すると、文字列に変換してからチェックするのが良さそうです。
そもそも CodeIgniter 3 では大人しく数値 ( 0, 1 ) で判別するのほうが利口なのかもしれません。
課題
1. バリデーションルールが見当たらない
Rule Reference を確認しても bool 値のチェックをしてくれそうなルールが見つかりません。
2. in_list(true,false) は bool 値を判定できない
一番カンタンに実現できそうなのは in_list(true,false)
のルールを設定することでした。
しかし、これは文字列にのみ有効で bool 値に対してはうまく機能しませんでした。
{
"title": "INVALID_ARGUMENT",
"status": 400,
"detail": "○○○ は true,false のいずれかでなければなりません。"
}
3. required を利用すると false の場合にエラーとなる
妥協点として required
のみにするという手も考えたのですが、渡された値が false
の場合に機能しませんでした。
{
"title": "INVALID_ARGUMENT",
"status": 400,
"detail": "○○○ は必須です。"
}
4. 独自バリデーションを定義してもキーが不在の場合はルールが走らない
ならば独自ルールを作成すればと思い、実際に作ってみました。
これで解決…と思ったのですが、キーが不在の場合は独自ルールが適用されず、required
をつけると false
の場合に上記の問題に引っかかるという状態でした。
解決策
最終的に以下の手順でバリデーションチェックをすることで解決しました。
var_export($boolean, true)
とすることで文字列としてのtrue
,false
に変換するrequired|in_list[true,false]
のルールでバリデーションチェックを実行する- 文字列から
switch
で分岐して再度bool
値に変換する
var_export($boolean, true) について
PHPer であればよく利用する var_export は第2引数の $return
を true
に設定することで出力ではなく戻り値として利用することができます。
文字列からの bool 値変換について
こちらは switch
を利用して愚直に書きます。
switch (set_value($field)) {
case 'true':
return true;
default:
case 'false':
return false;
}