Created
May 21, 2011 05:18
-
-
Save BaylorRae/984276 to your computer and use it in GitHub Desktop.
Flash Messages for PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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