JeuWeb (JeuPHP) - Crée ton jeu par navigateur

Version complète : [En Cours] Demande de conseils pour un site Professionnel
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Pages : 1 2 3 4
Bonjour,

Mon ami MeliMelo et moi même sommes en train de créé un "Moteur de Jeux". Nous sommes actuellement à la définition des diagrammes UML et la défintiion précise de tout ce que devra proposer le moteur (il inclut pour le moment, sur papier, toutes les possibilités des jeux que l'on retrouve sur le web).

De mon côté, afin de mieux apréhender le modèle MVC, j'ai du recoder un site (professionnel) que j'avai crée. Il y a actuellement un site totalement fonctionnel afin de pouvoir travailler mais qui celui ci ne respecte pas du tout le modèle MVC.

Je voudrai juste savoir si je suis sur la bonne route:

Il y a une page index.php qui fait appel à un fichier de config contenant des variables de type $inc['menu']= ... contenant plein de paramètres pour l'accès à mes pages. L'autoloader charge l'ensemble des classes indiquées dans les dossiers de $inc['Classes']= array...

Lors d'un clic sur le menu, la page index se charge de lire le tableau 'menu' et ouvre une page. Exemple:
Listing de logs. => Modules/Logs/index.php

Cette page crée un objet listingLog (classe située à la racine du site dans un dossier libs/class) qui lui même fait appel à une classe singleton bdd. L'objet stock les infos et on fait appel à un template situé dans: Modules/Logs/templates/log.list.template.php.

Celui ci contient des instructions du type: foreach (...as $element)
$element->getTitre()...

Concernant les formulaires, j'ai créé les classes suivantes:
form (1 -> *) elementForm (* -> 1) Validateur

Donc, en gros, une form contient un array d'élémentsForm et chaque element de la form possède un validateur.

J'ai bien:
1 intéraction indépendante avec la base de donnée (qui s'occupe de passer la requete)
1 récupération et traitement des infos via une page controller (index.php ou autre dans mon module)
1 template ou plusieurs appelés pour réaliser un affichage.

Voici mon arborescence:
Modules\Logs:
(d) Templates
(f) form.recherche.logs.php
(f) Liste.Logs.template.php
(f) index.php
(f) recherche.php


Voici les différents contenus (rien n'est commenté dans le code, un document existe à part en word):

Contenu de "index.php":
Code PHP :
<?php
if (!isset($_GET['idtitre']))
{
    
$Id_Titre 'global';
} else {
    
$Id_Titre $_GET['idtitre'];
}

$log = new log();
$ListeLogs $log->load_logs($Id_Titre, @$_GET['Id_Log'], @$_GET['orderby'], @$_GET['ordre'],utilisateur::getInstance()->getId());


require_once 
$dResponse['templates'].'Liste.Logs.template.php';

?>

Contenu de "recherche.php":
Code PHP :
<?php

form
::getInstance();
$formRecherche = new logRechercheForm();
$resultats 0;
if (isset(
$_POST[$formRecherche->getName()]))
{
    
$formRecherche->setFormValues();
    
$formRecherche->validateElements();
    if (
$formRecherche->getValidationForm() == TRUE)
    {
        
$log = new log();
        
$ListeLogs $log->recherche_logs($formRecherche->getChamp()->getFormValue(),$formRecherche->getChaine()->getFormValue());
        
$resultats count($ListeLogs);    

    }
    
}

include 
$dResponse['templates'].'form.recherche.logs.php';
if (
$formRecherche->getValidationForm() == TRUE)
{    
    require_once 
$dResponse['templates'].'Liste.Logs.template.php';
}    
?>

Contenu de "Liste.Logs.template.php":
Code PHP :
<table class="AffichageLogs">
    <
tr class="EnteteAffichageLogs">
        <
td>Id <br/>
        <
a href="?pg=logs&idtitres=<?php echo $Id_Titre ?>&orderby=Id&ordre=ASC"><img src="Images/Icones/ASC.png" class="ImgOrder"></a>
        <
a href="?pg=logs&idtitres=<?php echo $Id_Titre ?>&orderby=Id&ordre=DESC"><img src="Images/Icones/DESC.png" class="ImgOrder"></a>
        </
td>
        <
td>Projet</td>
        <
td>Env</td>
        <
td>Date deb.<br/>
        <
a href="?pg=logs&idtitres=<?php echo $Id_Titre ?>&orderby=Log_Date_Debut&ordre=ASC"><img src="Images/Icones/ASC.png" class="ImgOrder"></a>
        <
a href="?pg=logs&idtitres=<?php echo $Id_Titre ?>&orderby=Log_Date_Debut&ordre=DESC"><img src="Images/Icones/DESC.png" class="ImgOrder"></a>
        </
td>
        <
td>Heure deb.</td>
        <
td>Date Fin<br>
        <
a href="?pg=logs&idtitres=<?php echo $Id_Titre ?>&orderby=Log_Date_Fin&ordre=ASC"><img src="Images/Icones/ASC.png" class="ImgOrder"></a>
        <
a href="?pg=logs&idtitres=<?php echo $Id_Titre ?>&orderby=Log_Date_Fin&ordre=DESC"><img src="Images/Icones/DESC.png" class="ImgOrder"></a>
        </
td>
        <
td>Heure Fin</td>
        <
td>Duree</td>
        <
td>Code Ret.</td>
        <
td>Commentaire</td>
    </
tr>
    <?
php 
    
foreach ($ListeLogs as $valeur)
        {
    
?>
        <tr class="logs">
            <td><?php echo $valeur['Id_Log'?></td>
            <td><?php echo $valeur['Projet_Titre'?></td>
            <td><?php echo $valeur['Titre_Environnement'?></td>
            <td><?php echo $valeur['Log_Date_Debut'?></td>
            <td><?php echo $valeur['Log_Heure_Debut'?></td>
            <td><?php echo $valeur['Log_Date_Fin'?></td>
            <td><?php echo $valeur['Log_Heure_Fin'?></td>
            <td><?php echo difheure($valeur['Log_Heure_Debut'],$valeur['Log_Heure_Fin'] ) ?></td>
            <td><?php 
            
if (($valeur['Log_Code_Retour'] == "1") || ($valeur['Log_Code_Retour'] == "0"))
            {
                
$image $valeur['Log_Code_Retour'].'.PNG';
            } else {
                
$image '2.PNG';
            }
             
?><img src="Images/Icones/<?php echo $image ?>" alt="<?php echo $valeur['Log_Code_Retour'?>"></td>
            <td><div class="DescriptionLog"><?php echo $valeur['Log_Commentaire']  ?></div></td>
        </tr>
    <?php
    
}
    
?>
</table> 

Contenu de "form.recherche.logs.php"
Code PHP :
<form action="<?php echo $formRecherche->getAction() ?>" method="<?php echo $formRecherche->getMethode() ?>" name "<?php echo $formRecherche->getName() ?>">
<?
php if ($formRecherche->getChaine()->getValidator()->getErrors() != "")
?>
    <div class="error">
    <?php echo $formRecherche->getChaine()->getValidator()->getErrors() ?>
    </div>
<?php ?>
<?php 
echo $formRecherche->getChaine()->getLabel() ?> <INPUT type="<?php echo $formRecherche->getChaine()->getType() ?>" name="<?php echo $formRecherche->getChaine()->getName() ?>" value="<?php echo $formRecherche->getChaine()->getValues() ?>">
<br />
<?php echo $formRecherche->getChamp()->getLabel() ?> <SELECT name="<?php echo $formRecherche->getChamp()->getName() ?>">
<?php 
foreach ($formRecherche->getChamp()->getValues() as $clef => $valeur)
?>
    <option value="<?php echo $valeur ?>"><?php echo $clef ?></option>
<?php
}
?>
</SELECT><br/>
<input type="<?php echo $formRecherche->getAct()->getType() ?>" name="<?php echo $formRecherche->getAct()->getName() ?>" value="<?php echo $formRecherche->getAct()->getValues() ?>">
<input type="submit" name="submit" value="Rechercher">
</form>
<div class="recherche">

Recherche: <?php echo $formRecherche->getChaine()->getFormValue() ?> dans le champs <?php echo $formRecherche->getChamp()->getFormValue() ?><br/>
    <div class="<?php echo $formRecherche->getChaine()->getValues() ?>">
                
    </div>
</div><br/>Nombre d'enregistrements trouvés: <?php echo $resultats ?>

Ma page "index.php" principale:
Code PHP :
<?php
$dResponse 
= array();
$folders = array(array());

$dResponse['logo'] = 'Images/LogsManager_small.gif'
$dResponse['titre'] = 'LogsManager';

$dResponse['menu'][] = array('keytag' => 'accueil''link' => 'Boxes/Accueil/''Titre' => 'Accueil''mainpage' => '''display' => true);
$dResponse['menu'][] = array('keytag' => 'titres''link' => 'Modules/Titres/''Titre' => 'Logs''mainpage' => '''display' => true);
$dResponse['menu'][] = array('keytag' => 'logs''link' => 'Modules/Logs/''Titre' => 'Logs''mainpage' => '''display' => false);
$dResponse['menu'][] = array('keytag' => 'recherchelogs''link' => 'Modules/Logs/''Titre' => 'Rechercher log''mainpage' => 'recherche.php''display' => true);
$dResponse['menu'][] = array('keytag' => 'cftrcv''link' => 'Modules/Cft/''Titre' => 'ReceiveCFT''mainpage' => 'RCV.php''display' => true);
$dResponse['menu'][] = array('keytag' => 'cftsnd''link' => 'Modules/Cft/''Titre' => 'SendCFT''mainpage' => 'SND.php''display' => true);

$dResponse['style']['classique'] = 'Styles/classique.css';

$folders['classes'][] = 'libs/classes/';
$folders['classes'][] = 'libs/forms/';

?>

Je n'ai pas collé ici les classes de form, de elementForm et validator. Non plus celles de RechercheForm étendant la classe form.

Merci pour vos remarques constructive ! je les attend avec impatience.

N'hésitez pas, si vous avez la moindre question !

lemouiX
Eh beh 2 Tout ce code ferait il mal aux yeux ? Bon j'avoue... rien n'est commenté, mais aucun message et même pas un violent "Déjà commente ton code avant qu'on t'aide" ...
Je serai patient 2
l'exercice est formateur, mais pourquoi ne pas utiliser un framework connu , et y apporter tes contributions ?

personnellement, je vois un framework de jeux plutôt comme un ensemble de modules d'un framework connu que la conception d'un framework from scratch. ceci dit, je surveille l'avancement du projet.

A+

Pascal
Ahhh merci d'être le premier à répondre pascal (souvent les mêmes qui répondent first 2 ).

Disons que j'étudie symfony à coté mais pour vraiment comprendre le fonctionnement du modèle MVC (et pouvoir dire 'je l'ai fais, c'est le notre 2') j'ai décidé d'en développer un moi même. Je n'ai pas besoin d'un monstre et de perdre trop de temps sur un framework complet. Ce développement me permet au fur et à mesure de comprendre comment marche symfony (ou un autre framework) avec ses widgets par exemple.

J'ai repris quelques concepts de symfony et j'ai mis à ma sauce le reste. Le seul soucis pour moi est: "est ce que je vais dans la bonne direction ? est ce que j'ai bien compris le principe de MVC et est ce que je le code proprement ? si non, avez vous des conseils". Mon message un peu est là pour ça.

D'ailleur, l'outil développé pouvant être intéressant pour certains (utilisé actuellement dans une très grosse entreprise), n'hésitez pas à me contacter pour savoir un peu plus précisément ce que fais tout ce principe d'intéraction entre PHP/SQL Server/VBSCRIPT/BATCH 2

A bientôt et encore merci pour vos réponses et questions constructives !

lemouiX
pascal a écrit :l'exercice est formateur, mais pourquoi ne pas utiliser un framework connu , et y apporter tes contributions ?

personnellement, je vois un framework de jeux plutôt comme un ensemble de modules d'un framework connu que la conception d'un framework from scratch. ceci dit, je surveille l'avancement du projet.

A+

Pascal

Le probleme d'un framework, en fait y'en a plusieurs, c'est qu'il faut l'apprendre, c'est pas non plus insurmontable, mais personnelement et jusqu'a present c'est ce qui me retient de faire l'usage d'un framework connu.
Apres du point de vu programmation, faut etre honnete, c'est quand meme vachement moins marrant d'utiliser un framework plutot que de se construire le sien (et quand on a les idees clair c'est pas si dur que ca je trouve, apres je parle biensur du cas ou on se fait un framework pour soi).
Personnellement je suis le plus efficace en programmant quand ce que je fais "m'amuse" et quand je comprends la quasi totalite des tenants et aboutissants de ce que je suis en train de faire.

Par exemple, j'ai essaye Symfony et ZF, pendant un week end chacun, et a la fin de ce week end j'en etais encore a voir des gros doutes sur certains points clef, et c'est ce qui fait que je ne les utilise et utiliserais pas, ils ne font pas le poids face a un framework que je construis moi meme et dont je connais chaque recoin, dont je comprends chaque reaction et que je peux modifier facilement et rapidement.
pas eu le temps de regarder dans le détail, certainement des choses à en apprendre

Perso, je soutiens ta démarche, plutôt que d'utiliser un framework large(même si je comprends aussi la position), je préfèrerais m'appuyer sur quelque chose de ce genre, où l'équipe est "accessible" pour moi



bon maintenant , je suis trop avancé (et trop en retard 10) pour l'utiliser tel quel, mais cela m'intéressera de voir comment tu construits divers éléments
lemouix je ne trouve pas que tes couches sont assez bien découpé, trop rigide ta structure.
Prend exemple sur les Framework existant si tu veux faire le tiens.
Bonjour à tous et merci pour toutes ces réponses.

Apparement, je vois que je ne suis pas le seul à faire ce choix de développer un framework par moi même 2 et pour les mêmes raisons !
Qu'est ce que tu entends par trop rigide oxman ? pourrais tu me donner plus de détails ? ça pourrait m'aider stp.

Merci d'avance !
Tu pourrais nous fournir un schéma de l'architecture de ton fw ? Quand je parle d'architecture, je parle pas que de l'organisation de tes dossiers 16 Cela peut donc impliquer plusieurs schémas.
Ton objectif à terme est d'avoir ton propre fw ?
Bonjour Plume,

Mon objectif est de pouvoir réutiliser mon fw pour notre projet de jeux... et je commence à comprendre ce que voulais dire oxman !

Pour les schéma, comment est ce que je peux les afficher ici ? (en sachant que je suis au taf et que je n'ai pas d'accès FTP :/).

Merqui.

Edit: Je suis en train d'appliquer ce que j'ai appris de Java à Php 10 honte à moi, je me met enfin à utiliser UML pour php 10 j'utilise AgroUML... des avis ?

Pour un schéma rapide: voici mes classes et mes dépendances (que j'avai mis plus haut):
form (1 inclu *) elementForm (1 inclu 1) Validateur

formLogRecherche (1 étend ) form
Pages : 1 2 3 4
URLs de référence