●概要
フォーム入力処理において、
・フォーム入力が正常に行われた際に表示するページ
・フォーム入力がエラー(未入力など)の際に表示するページ
を切り替える際、エラー理由などのパラメータを次ページに渡す方法


●入力画面
コントローラ:
// 拡販パートナー用の初回登録画面(お名前とお名前フリガナを入力する)入力画面
  public function first_time_registration_for_partners_input_name() {
$this->set("title_for_layout","拡販パートナー様 - 新規登録 - お名前入力");

} // end of function

ビュー: ファイル名 first_time_registration_for_partners_input_name.ctp
<h1>名前を登録する</h1>
<p>本名をフルネームで入力してください</p>
  <?php echo $this->Form->create(false,array('type'=>'post','action'=>'./first_time_registration_for_partners_input_name_confirm')); /* CakePHP ver2.1 以降では、null ではなく false を設定する。*/ ?>
<h1>お名前</h1><?php echo $this->Form->text('name'); ?>
<br/><br/><p>例)大和 賢一郎</p><hr><br/><br/>
<h1>お名前ふりがな</h1><?php echo $this->Form->text('name_kana'); ?>
<br/><br/><p>例)やまと けんいちろう</p><hr><br/><br/>
    <?php echo $this->Form->end(" 確認画面へ進む "); ?>


●入力完了(正常)画面
コントローラ:
// 拡販パートナー用の初回登録画面(お名前とお名前フリガナを入力する)確認処理
public function first_time_registration_for_partners_input_name_confirm(){

$partner_id = "12345";

$name = $this -> data["name"]; // お名前
$name = strip_tags($name); // HTMLタグを除外する
$this -> set("name", Sanitize::stripAll($name));

$name_kana = $this -> data["name_kana"]; // お名前フリガナ
$name_kana = strip_tags($name_kana); // HTMLタグを除外する
$this -> set("name_kana", Sanitize::stripAll($name_kana));

$reason_for_error = ""; // エラー理由
$is_error = false; // エラー発生時は true を設定する。
if($name == null){
$is_error = true;
$reason_for_error .= "お名前が入力されていません。";
}

if($name_kana == null){
$is_error = true;
$reason_for_error .= "お名前ふりがなが入力されていません。";
}

if($is_error){
$this->redirect("./first_time_registration_for_partners_input_name_error/" . "$reason_for_error/" . "$partner_id/");
}

} //end of function

ビュー: ファイル名 first_time_registration_for_partners_input_name_confirm.ctp
<h1>I am first_time_registration_for_partners_input_name_confirm.ctp</h1>
<p>text1: <?php echo $name; ?></p>
<p>text2: <?php echo $name_kana; ?></p>

●入力エラー画面
コントローラ:
// 拡販パートナー用の初回登録画面(お名前とお名前フリガナを入力する)入力画面でエラー発生時に表示する画面
  public function first_time_registration_for_partners_input_name_error($reason_for_error,$partner_id) {
$this->set("title_for_layout","拡販パートナー様 - 新規登録 - お名前入力 - エラー");
$this->set("reason_for_error",$reason_for_error);
$this->set("partner_id",$partner_id);
} // end of function

ビュー: ファイル名 first_time_registration_for_partners_input_name_error.ctp
<?php echo $partner_id; ?>
<?php echo $reason_for_error; ?>
<h1>エラーが発生しました。i am first_time_registration_for_partners_input_name_confirm_error.ctp</h1>
<a href="./first_time_registration_for_partners_input_name">再入力する</a>

●解説
確認処理において、入力値がnullかどうかを調べ、nullの場合はエラー処理にリダイレクトさせている。
その際、エラー理由と、パラメータ(この例では$partner_id)を同時に渡している。
受け取ったエラー処理側では、受け取った値を $thisにsetして、ビューで表示させている。

表示例