CodeIgniterでフォームバリデーションを完全マスター!初心者向け徹底解説
生徒
「お問い合わせフォームを作っているのですが、名前が空欄だったり、メールアドレスの形式が間違っていたりするのをチェックする方法はありますか?」
先生
「CodeIgniter(コードイグナイター)には『フォームバリデーション』という、入力内容を自動で検査してくれる便利な機能が備わっていますよ。」
生徒
「それは便利そうですね!プログラミングが初めての私でも設定できるでしょうか?」
先生
「もちろんです。基本的なルールを覚えるだけで、安全で使いやすいフォームが作れるようになります。一緒に学んでいきましょう!」
1. フォームバリデーションとは?
Webサイトで、ユーザーが入力したデータが「正しい形式かどうか」を確認することをバリデーション(入力チェック)と呼びます。例えば、電話番号の欄に漢字が入っていたり、必須項目が空のまま送信されたりすると、システムが正しく動きません。これを防ぐために、あらかじめ「ルール」を決めておき、そのルールに合わない場合に「エラーメッセージ」を表示する仕組みが必要です。
PHPのフレームワークであるCodeIgniterを使えば、この複雑なチェック処理を驚くほど簡単に記述できます。初心者の方でも、どのようなルールを適用したいかを指定するだけで、安全なWebサイトを構築する第一歩を踏み出せます。
2. バリデーションライブラリの読み込み
CodeIgniterでこの機能を使うには、まずバリデーションを担当する「道具(ライブラリ)」を準備する必要があります。CodeIgniter 4では、コントローラーの中で$this->validate()という命令を使うのが一般的です。これにより、背後でバリデーションライブラリが呼び出され、入力されたデータを一つずつチェックしてくれます。
プログラミングにおいて、特定の機能を使えるように準備することをロード(読み込み)と言いますが、CodeIgniter 4では自動的に行われることが多いので、私たちは「どんなルールを適用するか」を考えることに集中できます。
3. 基本的なバリデーションの実装例
まずは、最もシンプルな例を見てみましょう。ユーザー名とメールアドレスを入力してもらうフォームを想定します。ユーザー名は必須で3文字以上、メールアドレスは正しい形式であることを条件にします。
public function create()
{
$rules = [
'username' => 'required|min_length[3]',
'email' => 'required|valid_email',
];
if (!$this->validate($rules)) {
// バリデーションに失敗した場合の処理
return view('signup', [
'validation' => $this->validator,
]);
}
// 成功した場合は次の画面へ
echo "登録が完了しました!";
}
上記のコードで、requiredは「必須入力」、min_length[3]は「3文字以上」、valid_emailは「正しいメール形式」という意味です。このように、縦棒(|)で区切ることで複数のルールを一度に適用できます。この書き方はCodeIgniter特有の便利な記述方法です。
4. 入力画面(ビュー)でのエラー表示
プログラム側でエラーを判定したら、それをユーザーに伝えないといけません。HTMLファイル(ビュー)の中で、エラーメッセージを表示させるコードを書きましょう。CodeIgniterにはエラーを一覧で表示する便利な関数が用意されています。
<form action="/user/create" method="post">
<div>
<label>ユーザー名</label>
<input type="text" name="username" value="">
</div>
<div>
<label>メールアドレス</label>
<input type="text" name="email" value="">
</div>
<div style="color: red;">
<?= $validation->listErrors() ?>
</div>
<button type="submit">送信する</button>
</form>
$validation->listErrors()という命令を書くだけで、ルールに違反した内容が箇条書きで自動的に表示されます。パソコンの操作に不慣れなユーザーでも、「何が間違っているのか」が一目でわかるようになります。
5. 個別のエラーメッセージを表示する方法
全てのエラーをまとめて出すのではなく、各入力項目のすぐ下にエラーを表示したい場合もあります。その方がユーザーにとっては親切ですよね。その場合はgetError()という関数を使います。
<div class="form-group">
<label>パスワード</label>
<input type="password" name="password" class="form-control">
<?php if (isset($validation) && $validation->hasError('password')): ?>
<p class="text-danger">
<?= $validation->getError('password') ?>
</p>
<?php endif; ?>
</div>
ここではif文が使われています。「もしパスワードにエラーがあったら(hasError)、その内容を表示する(getError)」という流れです。条件分岐を使うことで、エラーがないときには余計な表示を出さないスマートな画面が作れます。
6. カスタムエラーメッセージの設定
標準のエラーメッセージは英語だったり、少し素っ気ない表現だったりすることがあります。日本人のユーザー向けに「お名前を入力してください」といった優しい言葉に変えてみましょう。バリデーションルールの配列の中に、メッセージ用の配列を追加するだけで設定可能です。
$rules = [
'username' => 'required',
];
$errors = [
'username' => [
'required' => 'お名前は必ず入力してくださいね!',
],
];
if (!$this->validate($rules, $errors)) {
// エラー時の処理
}
このように設定することで、機械的な警告ではなく、温かみのある案内をユーザーに届けることができます。Webサイトの雰囲気に合わせた言葉選びができるのも、CodeIgniterの柔軟なところです。
7. 数値やパスワードの一致を確認する
お問い合わせフォーム以外にも、会員登録などでは「パスワードの再入力」がよくあります。二つの入力欄の内容が同じかどうかをチェックするルールも用意されています。matches[項目名]というルールを使います。また、年齢などの数値だけを許可する場合はnumericを使います。
$rules = [
'age' => 'required|numeric',
'password' => 'required|min_length[8]',
'pass_confirm' => 'required|matches[password]',
];
この設定により、「年齢欄には数字以外入れられない」「パスワードは8文字以上必要」「二つのパスワードが一致しないとエラー」という高度なチェックが一行で実現できます。手書きでこれを作るのは大変ですが、CodeIgniterならルール名を並べるだけです。
8. 入力値を保持する「set_value」関数
エラーが発生して画面が戻ったとき、せっかく入力した内容が全部消えていたら、ユーザーはがっかりしてしまいます。パソコンに詳しくない人なら、なおさら「もう一度打つのは面倒だ」と感じてサイトを離れてしまうかもしれません。これを防ぐのがset_value()という機能です。
<input type="text" name="username" value="<?= set_value('username') ?>">
これを使えば、エラーで戻ってきたときも、さっき入力した文字がそのまま入力欄に残ります。これを値の保持と呼びます。ユーザーにストレスを与えない優しい設計には欠かせないテクニックです。
9. バリデーションをグループ化して管理する
規模が大きなWebサイトになると、あちこちのページでバリデーションが必要になります。毎回コントローラーにルールを書くとコードが長くなって見づらくなります。そんなときは、設定ファイル(Validation.php)にルールをまとめて書いておくことができます。
「設定」を一つの場所にまとめることで、後でルールを変更したくなったときも、その一箇所を直すだけで全てのページに反映されます。これはメンテナンス性を高めるための重要な考え方です。初心者のうちから、整理整頓されたコードを書く意識を持つと、上達が早くなります。