2度同じ部分を探す羽目になったので、メモを残す。
CakePHP にて、警告メッセージを表示する際、
Controller::Session::setFlash()
を使って、メッセージをセットしてからビューを呼び出すと期待通りの動きをしてくれる。
例えば、ac1 というアクションで、数値エラーを見つけたらその旨の警告を表示したければ、コントローラ中で、次のように書く。
function ac1() {
......
if ( $data > 100 ) {
$this->Session->setFlash('数値が大きすぎます');
$this->redirect(array('action'=>'err')); // エラー用のアクションへ
}
}
で、エラー用のアクションは次のような感じで。
function err() {
}
これに対応するテンプレート err.ctp を用意すれば、その表示の中にエラーメッセージが埋め込まれて表示される。
というのが普通の使い方。
この時のビューの動作は、
1. ビューがセッションヘルパーをインスタンス化
2. セッションヘルパーの flash() メソッドをコール(レイアウトファイル中で呼ばれる)
3. flash() メソッドは、メッセージ(HTML)を出力
となっている。
だから、この警告メッセージを、alert ダイアログで表示したいと思った場合、セッションヘルパーの flash() メソッドをカスタマイズしなければいけない。
だからと言って、CakePHP 本体ライブラリのセッションヘルパーを書き換えるのは良くないので、libs/views/helpers/session.php を、各アプリケーションのディレクトリの下にある views/helpers の下にコピーし、これをカスタマイズすればいい。
フレームワークは、アプリケーションのディレクトリを先に探してくれるので、そちらが優先される。
CakePHP にて、警告メッセージを表示する際、
Controller::Session::setFlash()
を使って、メッセージをセットしてからビューを呼び出すと期待通りの動きをしてくれる。
例えば、ac1 というアクションで、数値エラーを見つけたらその旨の警告を表示したければ、コントローラ中で、次のように書く。
function ac1() {
......
if ( $data > 100 ) {
$this->Session->setFlash('数値が大きすぎます');
$this->redirect(array('action'=>'err')); // エラー用のアクションへ
}
}
で、エラー用のアクションは次のような感じで。
function err() {
}
これに対応するテンプレート err.ctp を用意すれば、その表示の中にエラーメッセージが埋め込まれて表示される。
というのが普通の使い方。
この時のビューの動作は、
1. ビューがセッションヘルパーをインスタンス化
2. セッションヘルパーの flash() メソッドをコール(レイアウトファイル中で呼ばれる)
3. flash() メソッドは、メッセージ(HTML)を出力
となっている。
だから、この警告メッセージを、alert ダイアログで表示したいと思った場合、セッションヘルパーの flash() メソッドをカスタマイズしなければいけない。
だからと言って、CakePHP 本体ライブラリのセッションヘルパーを書き換えるのは良くないので、libs/views/helpers/session.php を、各アプリケーションのディレクトリの下にある views/helpers の下にコピーし、これをカスタマイズすればいい。
フレームワークは、アプリケーションのディレクトリを先に探してくれるので、そちらが優先される。