FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Vous n'êtes pas identifié(e).

#1 12-05-2013 13:16:04

Doubrovski
Membre
Inscription : 29-03-2011
Messages : 58
Site Web

[Résolu] Architecture mvc et inclusion de common.php

Bonjour,

J'ai commencé la V2 d'un site en revoyant le design et le code pour qu'il soit responsive et basé sur une architecture mvc.
Pour le forum fluxbb, j'ai trouvé un style responsive plutôt sympa qui s'adapte très bien aux mobiles ou tablettes.

Bon, mais j'ai un problème qui n'a rien à voir avec le design :
J'essaie d'inclure le fichier common.php pour accéder aux précieuses variables de fluxbb.

....................
L'architecture mvc redirige en général toutes les url vers une seule page du type index.php.
Le système assez simple fonctionne de cette façon :
index.php?p=tutoriels/index
$controller = tutoriels
$action = index
->On va chercher la méthode "index" (action) de la class "tutoriels" (controlleur).
->La méthode "index" récupère les données de la bdd (model) et affiche la page HTML concernée (vue)
....................

-Quand j'inclue le fichier common.php dans index.php au début du script, ça fonctionne et on peut utiliser les variables de fluxbb sur la page index.php
-Par contre quand j'essaie d'utiliser les variables sur une "vue", les variables n'ont pas été passées.

J'ai essayé de faire transiter common.php d'une fonction du controlleur général vers la vue HTML, mais ça ne fonctionne pas car l'inclusion est faite trop tard dans le code, et ça génère une erreur (problème avec la variable $db du fichier function.php)

La seule solution que j'ai trouvé est de stocker les variables dans des constantes sur index.php
-J'inclue common.php sur index.php
-je fais des define :

define('USERNAME' , pun_htmlspecialchars($pun_user['username']));

-Je peux utiliser la variable n'importe où.

Avez vous de meilleures solutions ? J'imagine qu'il y a moyen de faire mieux.
Peut-être avec les sessions

Merci !

Dernière modification par Doubrovski (12-05-2013 13:24:05)

Hors ligne

#2 12-05-2013 15:06:03

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 660
Site Web

Re : [Résolu] Architecture mvc et inclusion de common.php

Bonjour,

Ça semble dépasser largement mes compétences. Déjà, je suis largué avec responsive et architecture mvc roll


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#3 12-05-2013 15:45:02

adaur
Membre
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 937
Site Web

Re : [Résolu] Architecture mvc et inclusion de common.php

Pareil que Oto. Je ne pratique pas ce style de code, mais je sais lorsque tu dois faire une action sur la BDD ou te servir de variables globales dans une fonction, tu dois faire

global $db, $pun_user;

Peut-être à appliquer ici aussi? Sinon va sur le .org, tu auras sans doute plus de réponses.


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#4 12-05-2013 17:58:19

Doubrovski
Membre
Inscription : 29-03-2011
Messages : 58
Site Web

Re : [Résolu] Architecture mvc et inclusion de common.php

Vous avez bien plus de connaissances en php que moi smile J'ai bricolé mon mvc en passant une semaine à essayer de comprendre ce type d'architecture... sans pour autant avoir des bases ultra solides de php...

Je pense que mon problème vient du fait que j'utilise en général assez mal les sessions, ou les variables globales.

J'ai tâtonné un peu et... CA MARCHE.
Tu avais raison, avec l'architecture mvc une "vue" (page qui ne contient que le code html et des echo ou foreach) est appelée par une méthode qui appartient à une class (controller). Dans un sens on utilise les variables dans une fonction.

Donc il faut placer :

global $db, $pun_user;

Dans les méthodes des controllers, par exemple :

function get_module($nom_module){

		global $db, $pun_user, $lang_common;

		$url_module = ROOT.'app/views/modules/'.$nom_module.'.php';

		if (file_exists($url_module)){
			require(ROOT.'app/views/modules/'.$nom_module.'.php');
		}
		else{
			echo 'Module inexistant';
		}
    }

Merci !

Dernière modification par Doubrovski (12-05-2013 18:01:42)

Hors ligne

#5 12-05-2013 19:24:07

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 660
Site Web

Re : [Résolu] Architecture mvc et inclusion de common.php

Bonsoir,

Lorsque j'ai vu que c'était OK en utilisant des constantes j'ai cogité puis pensé à global. Mais adaur m'avait devancé d'une longueur.


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#6 12-05-2013 19:46:22

Doubrovski
Membre
Inscription : 29-03-2011
Messages : 58
Site Web

Re : [Résolu] Architecture mvc et inclusion de common.php

Je me suis aperçu que je me compliquais la vie pour rien... il suffit de placer ce code :

global $db, $pun_user, $lang_common;

dans les pages de code html qui utilisent les variables... Pas besoin de le placer dans les méthodes des class.
Sauf si on utilise les variables fluxbb à l'intérieur des méthodes mais je ne vois pas l'intérêt. Peut-être pour manipuler la bdd du forum si c'est possible avec common.php ?

Dans le cas contraire je peux aussi bien ne pas faire d'include et placer mon module de connexion directement dans le code html des vues...

En tous cas merci !
J'ai été agréablement surpris quand j'ai choisis un nouveau design responsive pour fluxbb, fait par un anglophone.
La langue ne dépend pas du design et ça c'est très bien !
A+

Dernière modification par Doubrovski (12-05-2013 20:18:30)

Hors ligne

#7 13-05-2013 10:51:52

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 660
Site Web

Re : [Résolu] Architecture mvc et inclusion de common.php

Doubrovski a écrit :

Peut-être pour manipuler la bdd du forum si c'est possible avec common.php ?

Bonjour,

L'inclusion de common.php effectue beaucoup de « choses », dont :
- inclusion de include/functions.php
- inclusion de include/dblayer/common_db.php qui va :
--- charger la bibliothèque de gestion de la base de données
--- se connecter à la base de données
--- créer l'objet $db

// Create the database adapter object (and open/connect to/select db)
$db = new DBLayer($db_host, $db_username, $db_password, $db_name, $db_prefix, $p_connect);

Ce qui fait qu'ensuite, en ajoutant global $db dans ses propres scripts, on peut utiliser toutes les fonctions de la classe afférente, par exemple $db->query(...), $db->fetch_assoc(...), etc. sans avoir besoin de se re-connecter à ladite BDD.


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

Pied de page des forums