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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] MVC - Variable qui instancie Router() doit etre dispo dans toute l'application

Re: MVC - Variable qui instancie Router() doit etre dispo dans toute l'application

par stephweb » 30 nov. 2015, 14:00

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

Re: MVC - Variable qui instancie Router() doit etre dispo dans toute l'application

par ynx » 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

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

par stephweb » 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