FuelPHP でバリデーションエラーが起きたフィールドに入力値を表示する方法

この記事は公開されてから7年経過しています。現在とは内容が異なる場合がありますのでご注意ください。
最新の記事や関連記事をお探しの方は下の「サイト内検索」で検索してみてください。

FuelPHP の Fieldset クラスを使って入力フィールドを作っているときに、第2引数に Fieldset_Field::validated() を使ってデフォルトの値を表示していたのですが、もしバリデーションエラーになっていたときはこの validated() が返す値が空白になります。そこで、もしバリデーションエラーが起きていたら元々の入力値を返せるようにしてみました。

以下のソースコードには今回の Fieldset_Field クラスとは関係ないところも入ってますが、気にしないでください。

ex1. Fieldset クラスを使って入力フィールドを表示する例
fuel/app/classes/controller/index.php

fuel/app/classes/view/index.php

fuel/app/views/index.php

fuel/app/views/email.php

「test@example.jp」と入力したつもりが「testpexample.jp」と「@」を隣の「p」と入力された場合、valid_email のバリデーションルールでエラーが発生します。

エラーが発生したときに元の入力画面に戻ると入力フィールドのところにはエラーメッセージが表示されますが、その入力した値が消えてしまっていると思います。エンドユーザー的には「入力した内容のどこが悪かったのか」が知りたいとおもいますので、

この行を

とするとバリデーションエラー時には入力した値がデフォルトで入ります。

このようにフィールドが少ない場合ならいいのですが、フィールド数が多くなると面倒じゃないですか?
そこで、バリデーションエラーが発生したときは validated() で入力した値を返すようにしました。

方法としては Fieldset_Field クラスを拡張します。

fuel/app/classes/fieldset/field.php

拡張したクラスを bootstrap.php の Autoloader::add_classes に追加します。

fuel/app/bootstrap.php

これで、view では下記のような表示のままでバリデーションエラー時には入力した値がデフォルトの値になります。