バニラPHPでフラッシュデータ(フラッシュメッセージ)機能を実装する方法
PHPフレームワークのCodeIgniterを勉強していた際にページ遷移好みに表示され、リロードしても表示されないというフラッシュデータ機能が便利だなと思った。同じ機能を実装できるライブラリもあるが、今回はバニラPHPにてこの機能を実装してみたい。以下に実装方法をメモ。
やりたいこと
- 何らかの処理後に当該処理の成否を元にフラッシュデータを作成し、処理完了ページに遷移
- 処理完了ページでフラッシュデータを表示
ソースコード
何らかの処理ページ
<?php
session_start();
//何らかの処理をした後に$flgに成否をboolで格納
$flg = false;
//$flgによってclassとメッセージを変更
$class = ($flg) ? 'success' : 'error';
$msg = ($flg) ? '処理成功しました。' : 'エラーが発生しました。';
//セッションにデータを格納
$_SESSION['flash'][$class] = $msg;
//ページ遷移
header('Location: ./complete.php');
exit;
処理完了ページ
<?php
session_start();
//変数にセッションを格納
$flash = isset($_SESSION['flash']) ? $_SESSION['flash'] : array();
//セッションを削除
unset($_SESSION['flash']);
//フラッシュメッセージが存在する場合は出力
if( !empty($flash) ){
foreach( (array)$flash as $key => $val ){
echo '<div class="' . $key . '">' . $val . '</div>';
}
}
ブラウザから実行すると以下のような形で出力される筈。
<div class="error">エラーが発生しました。</div>
所感
先日メモしたjQueryプラグインの「Toastr」と相性が良さそう。
尚、PHPでのフラッシュデータライブラリだと「flasher」と「simple-flash」あたりを試してみたいところ。
参考サイト
関連記事
-
-
Class 'DOMDocument' not foundエラーの対処方法
PHPでphpQueryというライブラリを利用しようとすると「Fatal err ...
-
-
Codeigniter3で異なるデータベースを使用する
Codeigniterで2つのコンテンツがあって、それぞれ別のデータベースを使用 ...
-
-
エラー処理を1ページにまとめる
できるだけまとめておいた方が効率よさそうなのでメモ。 メインのフォルダにlogs ...
-
-
PHPで指定月の月末日を取得
今月の、だったらdate('t')でいくけど指定月の場合は どうしたらいいのか分 ...
-
-
JavaScriptの「pako」ライブラリでGzip圧縮したデータをPHPで展開する方法
先日、JavaScriptの「pako」ライブラリで文字列やオブジェクト(連想配 ...