LoginSignup
1
0

CodeIgniter4でのバリデーション(ルールの設定からエラーメッセージの表示 )

Last updated at Posted at 2024-05-18

今まで結構ふんわりバリデーションをしてたので基本的なことをおさらいしました。

設定

Config/Validation.php にバリデーションルールを書く。

Config/Validation.php

public array $hoge = [
    'name' => [
        'field' => 'name',
    
        'label' => 'Name',
        'rules' => 'required|max_length[30]',
    ],
];

コントローラー

$this->validateData()を用いてバリデーションします。
4.4以降の場合、$this->validator->getValidated()でデータを取得。

日本語のユーザーガイドでは$this->validate()が使用されていますが、現在推奨されていないようです。

Hoge.php
class Hoge extend BaseController {

    public function store() {
        if (!$this->validateData($this->request->getPost(), 'hoge')) {
            return redirect()->to('/行先')->withInput();
        }
        $validData = $this->validator->getValidated();
        // 好きなことをする
    }
}

ビュー(エラーメッセージの表示)

codeigniter3 のときにあったset_error_delimiters()みたいなのないかなーと思っていたらありました。
4.3以降はvalidation_show_errorが利用できるようです。

エラーメッセージ用のhtmlを好きなところ(今回はViews/errors/validation)にsingle_error.phpを作成し、
config/Validation.php に設定。

single_error.php
<span class='red'><?php echo esc($error); ?></span>
Validation.php
public array $templates = [
    'single_error' => 'errors/validation/single_error',
];

エラーメッセージを表示したいViewで、以下のように書けばバリデーションに引っかかったときにエラーメッセージが表示される。

HogeView.php
<div>
<?php
    echo form_label('お名前'); 
    // <label>お名前</label>
    
    echo form_input('name', '');
    // <input type="text" name="name" value="">
    
    echo validation_show_error('name', 'single_error');
    // <span class='red'>お名前を入力してください</span>
?>
</div>

おまけ

エラーメッセージの日本語化

composer で翻訳をして、

composer require codeigniter4/translations

Config/App.php$defalutLocaleja にする。

もしくは

app/LanguagejaディレクトリとValidation.phpを作成し、一つずつ書いていく。
(カスタムバリデーションのエラーメッセージなどはこれ)

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

参考

Codeigniter4 User Guide
Codeigniter4 ユーザーガイド
CodeIgniter4のシステムメッセージを日本語にする

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0