[RESOLU] MVC - Variable qui instancie Router() doit etre dispo dans toute l'application

Avatar du membre
Eléphant du PHP | 88 Messages

29 nov. 2015, 21:56

Bonjour,
je viens demander un peu d'aide SVP car j'aimerai qu'une variable soit disponible dans toute mon application.

Je suis en train de faire un un MVC avec du code maison, et je souhaite que l'instance de ma classe Router() soit disponible dans toute mon application, y compris dans mes vues...

Dans mon autoload.php, j'ai ceci :

Code : Tout sélectionner

<?php require ROOT.'/vendor/autoload.php'; define('BASE_URL', 'http://'.$_SERVER['HTTP_HOST'].'/nom-de-domaine'); $router = new Routing\Router($_GET); require ROOT.'/app/routes.php'; $router->active(); ?>
Ma constante BASE_URL est disponible de partout.
Par exemple si dans une de mes vue je fait

Code : Tout sélectionner

<?php echo BASE_URL; ?>
ça affiche bien sa valeur.
Par contrer si dans une de mes vue je fait ceci :

Code : Tout sélectionner

<?php var_dump($router); ?>
Je reçois une erreur "Notice: Undefined variable: router in ..."

Y a t-il un moyen de détourné ce "problème" SVP ?
(car il n y a visiblement pas moyen d'instancier une classe avec une constante),
Merci beaucoup

ynx
Mammouth du PHP | 586 Messages

30 nov. 2015, 13:32

Salut,

Une solution utilisée dans plusieurs framework est de faire appel à une méthode statique au sein d'une classe utilitaire accessible dans toute l'application.
Un exemple en reprenant le modèle de Joomla (classe JFactory) :
abstract class Factory {
	
	public static $router;
	
	public static function getRouter() {
		if (!self::$router) {
			self::$router = new Router();
		}
		
		return self::$router;
	}
	
}
Il suffit alors de charger cette classe au début de ton application pour pouvoir appeler le routeur depuis n'importe où :
$monRouter = Factory::getRouter();
Bonne journée

Avatar du membre
Eléphant du PHP | 88 Messages

30 nov. 2015, 14:00

Ok merci beaucoup.
Effectivement sa résous mon problème.
Je crois que ceci s'appelle un accesseur.