Bonjour,
J'essaye d'intégrer le sytème d'alertes proposé dans le tutoriel : https://www.grafikart.fr/tutoriels/php/flash-message-286 avec le model MVC proposé dans la formation programmation orientée objet.
Du coup, j'ai reppris la class "Session", j'ai préféré mettre les fonctions flash() et setFlash() en static que je trouve plus facilement "appelable" :
<?php
class Session
{
public function __construct()
{
session_start();
}
public static function setFlash($message, $type='error')
{
$_SESSION['flash']= ['message' => $message,
'type' => $type];
}
public static function flash()
{
if(isset($_SESSION['flash']))
{
?>
<div class="alert alert-<?php echo $_SESSION['flash']['type']; ?>">
<?php echo $_SESSION['flash']['message']; ?>
</div>
<?php
unset($_SESSION['flash']);
}
}
}
A partir du tutoriel de formation programmation objet, j'ai donc modifié la fonction load() de la class App :
public static function load()
{
session_start();
require ROOT.'/app/Autoloader.php';
Autoloader::register();
}
en
public static function load()
{
require ROOT.'/app/Autoloader.php';
Autoloader::register();
require ROOT.'/app/Session.php';
return new Session();
}
La class Session gérant les $_SESSION, il me semble plus stratégique que le démarrage se fasse dans class Session.
Dans mes "views", je récupére le message à afficher de la façon suivante :
<h1>Page d'accueil</h1>
En cours de développement.
<?php
echo Session::flash();
Et dans mes controllers je mets le message à afficher de la façon suivante :
public function index()
{
Session::setFlash('Test message', 'success');
$ess1='Essai 1';
$ess2='Essai 2';
$this->render('home/index', compact('ess1', 'ess2'));
}
Tout fonctionne pour le mieux, par contre j'ai un gros doute sur le fait que ma méthode soit la plus stratégique, si vous avez des conseils, je suis preneur !!!
Bonsoir,
Je débute en MVC et je vois que vous avez un Autoloader dans "load" alors je me pose la question de l'utilité des 2 lignes qui suivent.
Ooopss, en fait ça ne sert à rien. Je débute aussi, pas encore tous les réflexes ;)
Merci.
Code modifié pour la fonction load :
public static function load()
{
require ROOT.'/app/Autoloader.php';
Autoloader::register();
}