Skip to content

Instantly share code, notes, and snippets.

@BaylorRae
Created May 21, 2011 05:18
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save BaylorRae/984276 to your computer and use it in GitHub Desktop.
Save BaylorRae/984276 to your computer and use it in GitHub Desktop.
Flash Messages for PHP
<?php
class FlashMessages {
private $messages = array();
private $now = false;
private static $instance = null;
private function __construct() {
// Save all messages
$this->messages = $_SESSION['flash_messages'];
// Reset all flash messages or create the session
$_SESSION['flash_messages'] = array();
}
// Only allows one instance of the class
public static function instance() {
if( self::$instance === null )
self::$instance = new FlashMessages;
return self::$instance;
}
// don't allow cloning
private function __clone() {}
// Allows simple message adding
// usage: flash()->notice('You have logged in successfully');
public function __call($name, $args) {
$message = $args[0];
$this->message($name, $message);
}
public function message($name, $message) {
if( $this->now ) {
$this->messages[] = array(
'name' => $name,
'message' => $message
);
$this->now = false;
}else
$_SESSION['flash_messages'][] = array(
'name' => $name,
'message' => $message
);
}
public function each($callback = null) {
// Set default markup
if( $callback === null ) {
$callback = function($name, $message) {
echo '<div class="flash_' . $name . '">' . $message . '</div>';
};
}
foreach( $this->messages as $flash ) {
echo $callback($flash['name'], $flash['message']);
}
}
// Allows message to be displayed instantly
// (opposed to waiting for next page request)
public function now() {
$this->now = true;
return $this;
}
}
// Allows shorthand
function flash() {
return FlashMessages::instance();
}
/*
EXAMPLES
*/
// These will be saved for the next page
flash()->message('notice', 'You have logged in successfully');
flash()->notice('You have logged in successfully'); // same as code above
// This will run on the next flash()->now() call
flash()->now()->alert('Something went wrong deleting the record');
<?php
// Thanks to Thomas: http://forrst.com/posts/PHP_Flash_Messages-D2v#comment-305284
class FlashMessages {
private static $messages = array();
private static $now = false;
private static $inited = false;
// Allows simple message adding
// usage: flash()->notice('You have logged in successfully');
public static function __callStatic($name, $args) {
if( !self::$inited ){
self::$messages = isset($_SESSION['flash_messages']) ? $_SESSION['flash_messages'] : array();
$_SESSION['flash_messages'] = array();
self::$inited = true;
}
$message = $args[0];
self::message($name, $message);
}
public static function message($name, $message) {
if( self::$now ) {
self::$messages[] = array(
'name' => $name,
'message' => $message
);
self::$now = false;
}else{
$_SESSION['flash_messages'][] = array(
'name' => $name,
'message' => $message
);
}
}
public static function each($callback = null) {
if( $callback === null ) {
$callback = function($name, $message) {
echo '<div class="flash_' . $name . ' flash-msg">' . $message . '</div>';
};
}
foreach( self::$messages as $flash ) {
echo $callback($flash['name'], $flash['message']);
}
}
// Allows message to be displayed instantly
// (opposed to waiting for next page request)
public function now() {
self::$now = true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment