🔥

CodeIgniter4 カスタムルール内でネイティブルールを使用する

2023/12/06に公開

はじめに

本記事はエラーメッセージの出し分けのみを目的としたカスタムルール作成のサンプルである。

必須バリデーションのエラーメッセージ例

app/Language/ja/Validation.php
<?php
return [
    'required' => '{field} を入力してください',
];

受託で業務システムを開発していると
「セレクトボックス、ラジオボタン、チェックボックスの場合には『入力』ではなく『選択』と表現してほしい」
といった要望が稀によくある。

Setting Custom Error Messages
都度、カスタムエラーメッセージを設定することで対応可能ではあるが、実装者ごとのメッセージ表記揺れなどの面倒ごとは減らしたい。

実行環境

  • CodeIgniter 4.4.3

実装

カスタムルールの作成方法は公式の通り。
Creating Custom Rules

app/Config/Validation.php
  public array $ruleSets = [
      Rules::class,
      FormatRules::class,
      FileRules::class,
      CreditCardRules::class,
+     CustomRules::class,
  ];

カスタムルール内でネイティブルール required を使用することで検証内容を変えることなく、ルールの使い分けによるエラーメッセージの出し分けを可能にする。

app/Config/CustomRules.php
<?php

namespace Config;

use CodeIgniter\Validation\StrictRules\Rules;

class CustomRules
{
    private Rules $rules;

    public function __construct()
    {
        $this->rules = new Rules();
    }

    /**
     * @param string|null $str
     * @return bool
     */
    public function required_selection(?string $str = null): bool
    {
        return $this->rules->required($str);
    }
}
app/Language/ja/Validation.php
<?php
return [
    'required'           => '{field} を入力してください',
    'required_selection' => '{field} を選択してください',
];

Discussion