IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 PHP Discussion :

Créer un jeu avec Symfony [1.x]


Sujet :

PHP

  1. #81
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 524
    Points
    18 524
    Par défaut
    Oui c'est bien ce que j'ai fais.
    Je sais que mon action s'exécute parce qu'à la fin j'ai mis un $this->redirect pour tester et ça redirige dans le module que je veux.

    Mais ça ne fait pas ce que je lui dis de faire.
    J'ai écris quelque chose de simple dans mon indexSuccess, ça fonctionne je le copie/colle exactement depuis le début jusqu'à la fin dans mon action et là ça ne fonctionne plus.

    C'est super simple le code c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $q = Doctrine_Core::getTable('personnage')
    ->createQuery('c')
    ->where('c.id = ?', '1');
    $personnage = $q->execute();
    $personnage->getFirst()->setCelluleId(204);
    Dans indexSuccess ça fonctionne sans problème dans l'actions.class.php ça ne fonctionne plus.

    Par contre comment dois-je faire pour envoyer et récupérer quelque chose avec $request ?

    Je suis en train de me poser une question.
    Quand on fais :
    $personnage->getFirst()->setCelluleId($id_cellule);
    Est-ce que ça change directement la valeur dans la base, ou doit on par exemple faire :
    $personnage->save();

    Si c'était exactement ça !
    Ah ben je suis quand même content d'avoir trouvé.
    Par contre j'aimerais bien en savoir plus sur $request, si je pouvais envoyer en POST une string en paramètre lors de l'appuie sur un bouton ce serait cool.

    Ou alors je fais 4 action qui se ressembleront beaucoup.

    Parce que pour l'instant je donne en dur l'id d'un personnage.
    Je récupère l'objet du personnage, avec l'id de sa cellule, je récupère sa cellule, je récupère les coordonnées x et y de la cellule je modifie la coordonnée x vers la gauche, je recherche la cellule qui a la coordonnée y et la nouvelle coordonnée x, je set cette nouvelle cellule au personnage.
    Tout ça dans actions.class.php.

    Dans indexSuccess.php j'ai l'id de l'user connecté, je n'ai plus qu'a récupéré l'id du personnage avec qui il est en train de jouer et je n'aurais plus rien en dur.
    Keith Flint 1969 - 2019

  2. #82
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Bon...

    Pour ton action, manifestement, cela marche.

    Tu peux un peu simplifier ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $personnage = Doctrine_Core::getTable('personnage')->findOneById(1);
    $personnage->setCelluleId(204);
    L'idéal serait d'avoir la cellule (l'objet du modèle qui la représente) dans une variable, disons $cellule, la dernière ligne devient alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $personnage->setCellule($cellule)
    où le setCellule() fait référence à la relation.

    Encore mieux, si ton action est appelé par une route de type sfDoctrineRoute le code devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $p = $this->getRoute()->getObject()
    $p->setCellule($cellule)->save();
    et la route se charge via une méthode dans le modèle, de vérifier que ton personnage existe et appartient bien au joureur.

    Note que si tu as stocké le perso en jeu dans l'objet user a l'aide de méthode setPersonnage et getPersonnage comme on en avait parlé, le code devient alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $p = Doctrine_Core::getTable('personnage')->
              findOneById('$this->getUser()->getPersonnageId());
    $p....
    la méthode getPersonnageId est a construire.

    Après, tu peux faire des variations intéressante et faire en sorte que ton myUser te retourne directement l'objet du personnage en cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    // dans myUser
    ...
    private static $personnage = null;
     
    // stocke l'attribut du personnage dans le la zone conservée entre les instances
    function public setPersonnageId($Id)
    {
         $this->setAttribute('id', $id, 'personnage');
    }
     
    // récupère l'attribut du personnage dans la zone conservée
    function public getPersonnageId();
    {
         return $this->getAttribute('id', null, 'personnage');
    }
     
    // retourne l'objet du modèle du personnage si l'id est définie
    public function getPersonnage()
    {
         // vérifie si l'objet a déjà été récupéré si non, l'initialise
         if ( null === $this->personnage) 
        {
              // vérifie si l'id est définie
              if ( ! null === $this->getPersonnageId() )
              {
                   $this->personnage = Doctrine_core::getTable('personnage')->
                                     findOneById( $this->getPersonnageId() );
               }
               else
              {
                   $this->personnage = null;
               }
         }
         return $this->personnage;
    }
    L'idée de getPersonnage est de ne pas récupérer plusieurs fois les données dans une instance. Donc il vérifie s'il a déjà récupérer l'objet du personnage et si oui, ce contente de retourner un pointeur vers l'instance. Ca veux dire que si tu appels cette fonction plusieurs fois dans ton code tu n'as qu'une requête SQL mais aussi que c'est le même objet (pas des copies) qui est retourné à chaque fois.

    Le code dans ton action pour modifier la position de ton personnage courant devient alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $p = $this->getUser()->getPersonnage()->setCellule($cellule)->save;
    C'est pas beau symfony ? Et la POO

    Et tu échappes à la mode php 5.3 et symfony 2, ce qui va nous éviter plusieurs suicides.

    Tu as vu que la méthode save() était nécessaire pour enregistrer les données.

    Attention, il est 1:21 et je n'ai pas vérifier du tout le code... il est probable qu'il y reste des coquilles...
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  3. #83
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 524
    Points
    18 524
    Par défaut
    Merci beaucoup (je déjà du le dire des dizaines de fois, mais l'aide apporté es énorme et j'en suis très reconnaissant) .

    Il y avait quelques petites fautes de syntaxe, simple à voir.
    Par contre j'ai mis plus de temps à me rendre compte que ( ! null === $this->getPersonnageId() ) allait dans le else parce qu'il y a 3 =, je croyais qu'il y en avait que deux.

    findOneById est vraiment pratique.
    Il ni a pas d'execute, on retourne qu'un seul objet.

    Du coup ça y est je peux faire que l'user choisisse le personnage avec lequel il joue.
    Je pourrais afficher tout les personnages de l'user et faire un setPersonnageId selon le choix de l'user.

    En fait tout ne fonctionne peut être pas encore à 100%, je dois vérifier.
    Le static semble poser problème :
    Strict standards: Accessing static property myUser::$personnage as non static.
    Peut être que ça doit être public static function getPersonnage().

    J'ai bricolé un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public static function getPersonnage()
    {
      static $personnage;
      if ( null == $personnage) 
      {
        if ( null != sfContext::getInstance()->getUser()->getAttribute('id', null, 'personnage'))
        {
        $personnage = 	Doctrine_core::getTable('personnage')
    	     			->findOneById(sfContext::getInstance()->getUser()->getAttribute('id', null, 'personnage') );
        }
        else
        {
          $personnage = null;
        }
      }
      return $personnage;
    }
    Quoi quand fait j'aurais pu mettre getPersonnageId() en static et éviter de répéter deux fois sfContext::getInstance()->getUser()->getAttribute()...
    Je dois écrire self::getPersonnageId() ou myUser::getPersonnageId() ou bien on s'en fout ?
    Dans ma classe actions je peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $personnage = Doctrine_Core::getTable('personnage')
    ->findOneById(sfContext::getInstance()->getUser()->getPersonnageId());
    ========================================
    Pour les cellules qui téléportent vers une cellule d'une autre carte, je vais faire un tableau en hard comme pour les points max de magie, de vie et d'action.

    Par contre ce sera dans actions.class.php qu'on pourra vérifier si une cellule est ouverte donc j'aurais besoin que mes méthodes execute retournent quelque chose au cas où la nouvelle case est impraticable.
    Et si j'arrivais à leur envoyer quelque chose avec $request au lieu de faire 4 méthodes execute (une pour chaque direction) j'en ferais qu'une.

    Il y a un petit détail que je ne trouve pas (je trouve la documentation de Symfony pas assez fournit), je n'ai pas trouvé comment grisé un button_to, j'arrive pas à le disabled.
    Parce que je pourrais aussi dans la template grisé les boutons quand un mouvement est impossible.

    Edit : Ah si ça y est j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo button_to(__('Right'), 'membre/Droite', 'params: disabled=true');
    ====================
    Maintenant je bloque le bouton de la direction quand une cellule est fermé ou qu'elle n'existe pas.

    Je vais dessiner une deuxième carte et faire une téléportation.
    Keith Flint 1969 - 2019

  4. #84
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Le code dont je me suis inspiré, mais sans l'avoir sous les yeux, utiliser un protected pour la variable et pas un static.

    Ce qui est logique, vu que l'objet user est unique pour l'instance et reste en mémoire sur la durée de vie de l'instance.

    Ce qui devrait résoudre le problème.

    Je ne comprend pas trop le problème de la sélection du personnage. Je suppose qu'après le login tu affiches une liste avec les personnages de l'utilisateur et trois liens ou bouton (je préfère les liens, quitte a jouer sur la CSS pour qu'ils deviennent bouton, je n'utilise que rarement le bouton, pour valider un form par exemple, mais c'est presque tout). Donc, dans ta liste un lien pour modifier, un lien pour supprimer et un lien pour jouer avec (plus gros et plus visible que les deux autres)(n'hésite pas a utiliser les options intelligentes de symfony sur un lien pour demander une confirmation en java avant de le lancer, pour supprimer par exemple).

    Ton lien jouer avec va vers une action qui fait essentiellement un setPersonnageId(). Et redirige vers l'interface de jeu. Il faut malgré tout vérifier que le personnage est bien l'un de l'user.

    Encore un conseil, déclare une route pour chaque action (sauf si tu utilise des CRUD avec une sfDoctrineRouteCollection, dans ce cas là tu as une route pour le module). Utilises systématiquement le nom de la route pour créer l'url.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  5. #85
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 524
    Points
    18 524
    Par défaut
    Je dois faire des routes pour les actions, même quand il s'agit d'une function execute d'un module ?
    Parce comme je donne le nom du module et le nom de la fonction, pourquoi utiliser une route ?

    Alors ce que je devrais faire, c'est que lorsque l'utilisateur se connecte, il a la possibilité de cliquer sur un lien qui lui permet de choisir son personnage et après avoir fait son choix il peut jouer ?

    Comment je pourrais appeler une fonction d'actions.class.php en transmettant une variable ?
    En plus clair : je vous faire un link_to vers une fonction d'un module en transmettant un int.
    J'aimerais faire un module qui affiche les personnages du joueurs et selon sont choix on exécute une action qui set son personnage puis redirige vers le module qui affiche le jeu.
    Keith Flint 1969 - 2019

  6. #86
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 605
    Points
    188 605
    Par défaut
    Citation Envoyé par thierrybenji Voir le message
    Je dois faire des routes pour les actions, même quand il s'agit d'une function execute d'un module ?
    Parce comme je donne le nom du module et le nom de la fonction, pourquoi utiliser une route ?
    Par exemple, pour avoir de belles URL, avec des paramètres bien intégrés, des mots clés comme tu les veux et où tu les veux, parce que ça rend tes URL insensibles aux changements internes de structure, etc.

    Citation Envoyé par thierrybenji Voir le message
    Comment je pourrais appeler une fonction d'actions.class.php en transmettant une variable ?
    En plus clair : je vous faire un link_to vers une fonction d'un module en transmettant un int.
    J'aimerais faire un module qui affiche les personnages du joueurs et selon sont choix on exécute une action qui set son personnage puis redirige vers le module qui affiche le jeu.
    Tente le paramètre supplémentaire de link_to :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo link_to('link', 'route', array('param1' => (int) $monInt)); ?>
    Il sera mis dans l'URL comme indiqué dans la route ou bien comme simple paramètre après le ? s'il n'est pas dans la définition de la route.

    Tu le récupères comme ça dans ton action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $request->getParameter('param1');
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  7. #87
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 524
    Points
    18 524
    Par défaut
    Merci dourouc05.

    Pour que ça fonctionne je dois faire $request->getParameter('param1', 1);
    Ah non là ça marche pas c'est juste égal à 1.
    J'obtiens que NULL.
    Keith Flint 1969 - 2019

  8. #88
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Va pas trop vite et pas dans tous les sens !

    La tête du perso, j'attendrais d'avoir tout terminé pour jouer a envoyer des fichiers... c'est pas le truc le plus simple.

    Les routes permettent comme le dit Dourouc d'avoir de belles url, ce qui est important. Elles permettent aussi d'avoir une indépendance entre les modules/action et les url qui les envoies. Ton lien pointe vers une route. Le nom de la route peut être changé sans rien impacté, la destination de la route peut changer sans que tes liens et tes modules appelant ne soient impacté. Seul le nom de la route ne pourra plus changer.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  9. #89
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 524
    Points
    18 524
    Par défaut
    Oui alors il peut sembler que j'aille un peu dans tout les sens, mais puisque je bloquais sur le formulaire de création de personnage pour l'user, j'ai préféré travailler un peu l'affichage et l'interaction du joueur.

    J'ai rendez vous avec mon chef de projet, j'aurais aimé avoir quelques trucs à lui montrer, là apparemment c'est bon.

    Pour les paramètres et le $request, j'utilise deux solutions, j'ai fais des routes avec le paramètre écrit dedans et j'utilise aussi link_to, mais en GET, ça fait module/function?param=$param.

    Maintenant j'ai une fonction qui reçoit en paramètre la direction où veut aller le personnage et qui le déplace selon la direction choisi.
    Une fonction qui reçoit en paramètre l'id d'un personnage et qui le set à l'user.
    Keith Flint 1969 - 2019

  10. #90
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Citation Envoyé par thierrybenji Voir le message
    Pour les paramètres et le $request, j'utilise deux solutions, j'ai fais des routes avec le paramètre écrit dedans et j'utilise aussi link_to, mais en GET, ça fait module/function?param=$param.
    Ne JAMAIS utiliser les variables GET, POST et autre variables PHP. TOUJOURS passer par l'objet $request qui a toutes ces information en son seins (et plus parfois).

    Citation Envoyé par thierrybenji Voir le message
    Maintenant j'ai une fonction qui reçoit en paramètre la direction où veut aller le personnage et qui le déplace selon la direction choisi.
    Une fonction qui reçoit en paramètre l'id d'un personnage et qui le set à l'user.
    Je ne suis pas sur de savoir s'il y a une question et de quel question il s'agit...
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  11. #91
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 524
    Points
    18 524
    Par défaut
    J'ai dis que j'utilisais GET, parce que j'affiche la variable dans le lien, mais je récupère la valeur avec $request->getParameter('param');
    C'est juste que link_to('lien', 'module/action', array('param' => $param)) ne me met rien dans getParameter('param') alors j'ai fais 'module/action?param=$param'.

    Je ne posais pas de question, je disais juste ce que j'ai fais pour savoir si c'était critiquable.
    Keith Flint 1969 - 2019

  12. #92
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    En fait la première syntaxe ne marche pas partout et ne me semble pas correctement écrite, je pense qu'il y a dû y avoir une erreur quelque part.

    Ta syntaxe, si elle n'est pas la plus belle fonctionne partout... et c'est celle que j'utilise. Quoiqu'elle serait plus proche de :
    link_to('lien', '@maRoutePourAction?param=' . $param)

    a noter que si ta route (maRoutePourAction) est une sfDoctrineRoute ou un élément d'une sfDoctrineRouteCollection et que le $param est un champ (généralement Id ou Slug) d'un $objet, tu peux aussi faire
    link_to('lien', '@maRoutePourAction', $object)

    (J'ai un méchant doute avec link_to)
    Ce qui a l'avantage de ne pas te lier au champ affiché et te permettre dans ton lien de passer d'un affichage par Id à un affichage par Slug sans avoir à modifier le code qui appel le lien.

    Ok pour le GET.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  13. #93
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 524
    Points
    18 524
    Par défaut
    Merci pour ces précisions.
    Quelque chose "d'étrange" se produit.
    Quand un utilisateur se connecte, qu'il set un personnage, quand il se déconnecte :
    $sf_user->isAuthenticated() est bien null.
    $sf_user->getUserId() est bien null (c'est une méthode que vous avez écrit dans myUser.class.php ).
    Mais par exemple $sf_user->getPersonnageId() retourne toujours l'id de l'user qui était connecté avant.
    J'ai trouvé ça "rigolo" mais c'est pas vraiment un problème je pense que je peux le modifier lors de la déconnexion de l'user, ou je rajoute juste un if $sf_user->isAuthenticated() (mais ça ferait un peu bricolage) .
    Je pense à public function signOut() de plugins\sfDoctrineGuardPlugin\lib\user\sfGuardSecurityUser.class.php.

    Comment partager un tableau $tab entre plusieurs page ?
    Parce que j'ai un tableau qui donne pour chaque classe et chaque niveau les niveaux max de points de vie, de magie et d'action.
    J'en ais besoin pour afficher les points du personnage par rapport au point max qu'il peut avoir avec cette classe à ce niveau là.
    Mais aussi lorsque l'utilisateur se connecte, je voudrais regarder sa dernière connexion, et si l'heure de la connexion n'est pas le même jour que l'heure de sa précédente connexion, on met les points de tout ses personnages au max.

    j'ai essayé avec un include_partial('module/nom'), dans le module j'ai un fichier _nom.php (c'est pour l'exemple), et ben je ne peux pas mettre $tab dans _nom.php et faire un inclue_partial, le page qui fais l'include_partial ne connait pas la variable $tab.

    Alors qu'en PHP basique, si tu met une variable dans un fichier que t'inclus, la page qui inclus ce fichier connait la variable.

    Je me dis que je pourrais aussi modifier le schema et gérer ça avec des tables.
    Mais ça gagnait du temps l'utilisation du tableau et c'est vrai que je n'en ais pas spécialement beaucoup !
    Keith Flint 1969 - 2019

  14. #94
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Citation Envoyé par thierrybenji Voir le message
    Merci pour ces précisions.
    Quelque chose "d'étrange" se produit.
    Quand un utilisateur se connecte, qu'il set un personnage, quand il se déconnecte :
    $sf_user->isAuthenticated() est bien null.
    $sf_user->getUserId() est bien null (c'est une méthode que vous avez écrit dans myUser.class.php ).
    Mais par exemple $sf_user->getPersonnageId() retourne toujours l'id de l'user qui était connecté avant.
    J'ai trouvé ça "rigolo" mais c'est pas vraiment un problème je pense que je peux le modifier lors de la déconnexion de l'user, ou je rajoute juste un if $sf_user->isAuthenticated() (mais ça ferait un peu bricolage) .
    Je pense à public function signOut() de plugins\sfDoctrineGuardPlugin\lib\user\sfGuardSecurityUser.class.php.
    J'ai dû l'évoquer cette modification a faire.
    Il faut bien modifier signOut() mais surtout pas dans le fichier du plugin. Dans ton myUser, tu crées une méthode signOut() et tu commences par appeler la méthode de l'objet parent : parent::signOut() puis ensuite tu fait ton traitement.

    Il y a une autre méthode par un système de gestion des événements, mais ici cela me semble un peu lourd et sans intérêt.

    Citation Envoyé par thierrybenji Voir le message
    Comment partager un tableau $tab entre plusieurs page ?
    Parce que j'ai un tableau qui donne pour chaque classe et chaque niveau les niveaux max de points de vie, de magie et d'action.
    J'en ais besoin pour afficher les points du personnage par rapport au point max qu'il peut avoir avec cette classe à ce niveau là.
    Je ne suis pas sur de ce que tu entends par afficher entre plusieurs page, mais si tu veux une liste qui s'étende sur plusieurs pages automatiquement avec des boutons page suivante, précédant et les numéros des pages... C'est plutôt lourd à gérer, cela passe par un objet pager qui fait une partie du travail.

    Si tu peux t'en passer, vu le temps qu'il reste, surtout n'hésite pas. Cela marche bien mais ne maîtriser le fonctionnement n'est pas évident.

    Citation Envoyé par thierrybenji Voir le message
    Mais aussi lorsque l'utilisateur se connecte, je voudrais regarder sa dernière connexion, et si l'heure de la connexion n'est pas le même jour que l'heure de sa précédente connexion, on met les points de tout ses personnages au max.
    Avoir la date et l'heure de la dernière communication est relativement compliqué, dans la mesure où tu ne gères pas l'objet sfGuardUser qui gère les informations de l'utilisateur.

    Il faut rajouter un champ dans le table et en gérer le remplissage. Créer en utilisant l'héritage ou en récupérant la description de la table dans le shema.yml du plugin et en en insérant la définition dans ton schéma avec, bien sur, la modification. Puis en modifiant la méthode signIn() comme décris ci-dessus pour mettre à jour le profil utilisateur.

    Mais je ne suis pas sur que mettre cela au niveau de l'utilisateur soit une bonne idée. Pour moi, cela aurait plutôt a voir avec le personnage et donc, je stockerais l'information dans la table des personnages, ce qui nous arrange vu que c'est du code à toi. Et je changerais la méthode d'initialisation d'un joueur, qui est aussi du code à toi.

    Citation Envoyé par thierrybenji Voir le message
    j'ai essayé avec un include_partial('module/nom'), dans le module j'ai un fichier _nom.php (c'est pour l'exemple), et ben je ne peux pas mettre $tab dans _nom.php et faire un inclue_partial, le page qui fais l'include_partial ne connait pas la variable $tab.

    Alors qu'en PHP basique, si tu met une variable dans un fichier que t'inclus, la page qui inclus ce fichier connait la variable.

    Je me dis que je pourrais aussi modifier le schema et gérer ça avec des tables.
    Mais ça gagnait du temps l'utilisation du tableau et c'est vrai que je n'en ais pas spécialement beaucoup !
    En principe tu ne fais plus ce type de manipulation.

    L'idéal sera de créer une méthode static getNiveaux() sur l'objet classeTable.class.php. La méthode retournant le tableau. Toutes les données sont dans un seul objet. Quant tu veux retrouver les niveaux tu fais un :
    $tab = classeTable::getNiveaux()
    et pour retrouver dans l'objet lui même
    $tab = self::getNiveaux()

    Sauf exception, dans symfony 1.4 pas d''include"

    Tu peux le mettre en table, mais je ne vois pas l'intérêt pour une donnée qui n'est pas sensée évoluer dans le temps et qui serait plus longue à récupérer.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  15. #95
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 524
    Points
    18 524
    Par défaut
    J'ai de quoi faire cet après midi, ainsi que tout les jours à venir d'ailleurs !
    Je suis aller voir mon chef de projet.
    Il ma donné beaucoup d'indications quand au chemin que je dois prendre.
    En fait je dois implémenter ce que je peux et laisser tomber ce sure quoi je plante.
    Je dois faire un rapport, heureusement il m'a donné un plan.

    Je vais de ce pas, créer une une méthode signOut dans mon myUser.
    Modifier mon schema.yml pour m'approcher, voir coller à la version final.
    Faire une méthode, et bien d'autres trucs encore !

    Vous avez vraiment beaucoup de temps à perdre avec un boulet comme moi.
    Merci
    Keith Flint 1969 - 2019

  16. #96
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    C'est mon côté papa poule !

    Tiens nous au courant.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  17. #97
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 524
    Points
    18 524
    Par défaut
    Purée j'ai l'impression d'avoir avancé là !

    Je peux récupérer le tableau où je veux.

    Au moment du logout, je set l'id du personnage à null.

    Et le mieux c'est que j'ai rajouté un timestamp last_login dans personnage.
    Et à chaque fois que l'user choisie un personnage pour jouer avec, on met l'heure actuel dans ce champ.

    Je vais modifier un peu, au moment où l'utilisateur choisiras un personnage, on regardera last_login, si le jour est différent au jour actuel, je mettrais ces points à fond, et je seterais un nouveau last-login.
    Si l'user à déjà joué avec ce personnage ce jour là, je ne fais rien ou je met à jour le last-login mais ça me servirait à rien.
    Keith Flint 1969 - 2019

  18. #98
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Ben voilà !

    En fait, la difficulté avec ce type de programmation, c'est la granularité (le code est un peu partout) du code. Par contre, une fois qu'on sait où le mettre au mieux, il en faut très peu pour en faire beaucoup.

    Pour ta mise à jour de la date, tous dépend pour les points de mouvement.

    S'il faut qu'il laisse dormir le perso 24H, il faut mettre la date et heure du dernier login. Si les points sont a utiliser dans les 24H qui suivent leur attribution, il faut mettre la date et l'heure de l'attribution, se qui n'empêche pas de prendre en compte le dernier login, mais pas dans le calcul des points.

    N'oublie pas de réfléchir et de noter dans ton rapport quelques réflexions sur le côté modèle économique d'un tel projet IRL (mdr)(In Real Live, dans la vraie vie). En effet, si tu voulais faire un tel jeu dans la vraie vie, il va bien falloir y mettre du blé (ton temps de développement, la location des serveur) et donc équilibrer le budget. Il est possible (probable si je suis présent au jury) que tu aies des questions sur cette partie, juste pour voir si tu y as réfléchis.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  19. #99
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 524
    Points
    18 524
    Par défaut
    Je vais rester simple, si la dernière fois que l'user choisie un personnage date de la veille je remet tout au max.

    Réfléchir au modèle économique au cas où on me poserait des questions la dessus durant ma soutenance, c'est une très bonne idée, merci.

    Il ne me reste plus qu'a m'occuper des items/vendeurs et des combats/ennemis.
    J'ai modifié le schéma pour prendre tout en compte, si j'ai bien pensé à tout.
    Keith Flint 1969 - 2019

  20. #100
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Et si tu as un endroit pour mettre en ligne, pour qu'on puisse voir l’œuvre finale, n'hésite pas
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compte-rendu Android LiveCode #5 : créer un jeu en 1 h avec Project Anarchy
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 16/10/2013, 20h01
  2. Créer une table avec un jeu de données de test
    Par xarkam dans le forum SQLite
    Réponses: 2
    Dernier message: 08/08/2013, 13h39
  3. Réponses: 1
    Dernier message: 07/04/2010, 15h28
  4. Créer un jeu C avec SDL (hexagones)
    Par gaby_1 dans le forum Développement 2D, 3D et Jeux
    Réponses: 5
    Dernier message: 21/03/2007, 16h39
  5. Créer un jeu avec plusieurs langages
    Par spidouille dans le forum Pascal
    Réponses: 6
    Dernier message: 04/10/2005, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo