今まで結構ふんわりバリデーションをしてたので基本的なことをおさらいしました。
設定
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()
が使用されていますが、現在推奨されていないようです。
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
に設定。
<span class='red'><?php echo esc($error); ?></span>
public array $templates = [
'single_error' => 'errors/validation/single_error',
];
エラーメッセージを表示したいViewで、以下のように書けばバリデーションに引っかかったときにエラーメッセージが表示される。
<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
の $defalutLocale
を ja
にする。
もしくは
app/Language
に ja
ディレクトリとValidation.php
を作成し、一つずつ書いていく。
(カスタムバリデーションのエラーメッセージなどはこれ)
<?php
return [
'required' => '{field} を入力してください。',
];
参考
Codeigniter4 User Guide
Codeigniter4 ユーザーガイド
CodeIgniter4のシステムメッセージを日本語にする