Handle the display of errors and success messages across all website sections.
The functionality is very simple, allowing to set a success or error message anywhere in the execution thread (in the main file, in a function or in a class method).
Once the message is stored (written to session in this case), it is scheduled to be displayed. After the message is displayed, it is deleted from session. The Singleton implementation for the Messages class offers extra programming speed and ease of use.
1) Class definition
class SessionMessages {
static private $instance = null;
private $session_name = 'session_messages';
public function __construct() {
if(!isset($_SESSION[$this->session_name])) {
$_SESSION[$this->session_name]['message'] = '';
$_SESSION[$this->session_name]['message_available'] = false;
$_SESSION[$this->session_name]['message_error'] = '';
$_SESSION[$this->session_name]['message_error_available'] = false;
}
}
public function getInstance() {
if(!self::$instance) {
self::$instance = new SessionMessages();
}
return self::$instance;
}
public function setMessage($_message) {
$_SESSION[$this->session_name]['message'] = $_message;
$_SESSION[$this->session_name]['message_available'] = true;
}
public function messageAvailableToDisplay() {
return $_SESSION[$this->session_name]['message_available'];
}
public function getMessageForDisplay() {
$_SESSION[$this->session_name]['message_available'] = false;
return $_SESSION[$this->session_name]['message'];
}
public function setMessageError($_message) {
$_SESSION[$this->session_name]['message_error'] = $_message;
$_SESSION[$this->session_name]['message_error_available'] = true;
}
public function messageErrorAvailableToDisplay() {
return $_SESSION[$this->session_name]['message_error_available'];
}
public function getMessageErrorForDisplay() {
$_SESSION[$this->session_name]['message_error_available'] = false;
return $_SESSION[$this->session_name]['message_error'];
}
}
2) Storing a success message
if(...database insert ok...) {
SessionMessages::getInstance()->setMessage('Custom OK message.');
}
3) Storing an error message
if(...database insert failed...) {
SessionMessages::getInstance()->setMessageError('Errors encountered.');
}
4) The file which displays the messages (included in header.php for example):
if(SessionMessages::getInstance()->messageAvailableToDisplay()) {
echo '<div class="msg">' . SessionMessages::getInstance()->getMessageForDisplay() . '</div>';
}
if(SessionMessages::getInstance()->messageErrorAvailableToDisplay()) {
echo '<div class="errors">' . SessionMessages::getInstance()->getMessageErrorForDisplay() . '</div>';
}
It's the most rapid solution for managing messages in any PHP application.