CakePHP

 CakePHPでバリデーションエラーが発生した場合、入力フォームのテキストボックスなどの近くにエラーメッセージが表示されます。

 しかし、そのエラーメッセージは通常テキストボックスの下に表示されますが、時と場合によってはテキストボックスの上に表示したい場合があります。

 下記にそのエラーメッセージの位置を変更する方法を明記します。

通常のエラーメッセージ

 例えば下記のような入力フォームのビューがあったとします。

<?php
echo $form->create("Test", array("action"=>"act"));
echo $form->input("Test.name", array("type"=>"text"));
echo $form->end();
?>

 上記のコードの場合でバリデーションエラーが発生すると下記のようにテキストボックスの下にエラーメッセージが表示されます。

通常のエラーメッセージ

通常のエラーメッセージ

変更後のエラーメッセージ

 このエラーメッセージの位置をテキストボックスの上に表示する場合は下記のようなプログラムにします。

<?php
$format = array('before', 'label', 'error', 'between', 'input', 'after');
echo $form->create("Test", array("action"=>"act"));
echo $form->input("Test.name", array("type"=>"text", "format"=>$format));
echo $form->end();
?>

 このプログラムによりエラーメッセージは下記のように表示されます。

テキストボックスの上にエラーメッセージが表示された

テキストボックスの上にエラーメッセージが表示された

解説

 さて、なぜ、テキストボックスの上にエラーメッセージが表示されたかというと、プログラム内の

$format = array(‘before’, ‘label’, ‘error’, ‘between’, ‘input’, ‘after’);

がキーになります。CakePHPのフォームヘルパー(/cake/libs/view/helpers/form.php)のinput関数を見てみると

$format = $format ? $format : array('before', 'label', 'between', 'input', 'after', 'error');

の一文が含まれています。これはオプション要素の出力を表していて、この順番でそれぞれの要素を出力します。そこで配列を見てみると「error」が最後に並べられているのでエラー発生時は一番最後に表示されるわけです。

 そこで、format要素にこの出力する順番を変更することでエラーの出力場所をテキストボックスの前に変更できます。

 ちなみにチェックボックスの場合はデフォルトで

array('before', 'input', 'between', 'label', 'after', 'error');

となっているので御注意を。あと、この方法はCakePHP 1.3の場合です。他のバージョンの場合は未チェックです。

(参考サイト)
Change the position of your validation error messages | The Bakery, Everything CakePHP