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

Symfony PHP Discussion :

liste de formulaire


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut liste de formulaire
    voila j'ai une liste de personne auxquels je doit pour une date précise saisir des données.
    Au lieu d'avoir une liste des personnes avec un bouton pour aller sur la page de saisie, j'essaye d'integrer le formulaire/
    mon code action:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function executeListuser(sfWebrequest $request)
    	{
    		$this->grpe = $this->getRoute()->getObject();
      		$listUser = Doctrine::getTable('sfGuardUser')->listuseringrpecheqdej($this->grpe->getId());
      		foreach ($listUser as $i=>$user){
      			 $list[$i]['user'] = $user;
      			 $chq_dej = new ChqDej();
      			 $chq_dej->setUserId($user->getId());
      			 $chq_dej->setDate("2010-11-05");
      			 $list[$i]['form'] = new ChqDejForm($chq_dej);
    		}
    		$this->list = $list;
    	}
    et mon code actionSuccess:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php echo $grpe ?>
    <table >
    	<?php foreach($list as $i=>$user): ?>
         <tr>
             <td>
             	<?php echo $user['user'] ?>
             </td>
             <td>
             	<?php  include_partial('ChqDej/form', array('form' => $user['form'])) ?>
             </td>
         </tr>
       <?php endforeach;?>
     </table>
    si j'arrive bien à avoir un formulaire par user, il ne prend pas mes valeurs par défaut.
    J'ai téster sur l'action form new, ça marche.
    d'ou vient le pb ?

    Autant pour moi, ça devait être un probléme de cache, ça marche.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Attention tout de même à respecter le modèle MVC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
              foreach ($listUser as $i=>$user){
                   $list[$i]['user'] = $user;
                   $chq_dej = new ChqDej();
                   $chq_dej->setUserId($user->getId());
                   $chq_dej->setDate("2010-11-05");
                   $list[$i]['form'] = new ChqDejForm($chq_dej);
            }
    correspond à du code de ton Model, pas à celui du Controler.

    listuseringrpecheqdej
    Et pour revenir sur le nommage, celui-ci ne respecte aucune norme !!
    - pas de cohérence de la langue ;
    - pas de séparation entre les mots (que ce soit avec le caractère _ ou une majuscule) ;
    - abus de raccourcis de langage ;
    - difficile compréhension de ce que doit faire la méthode.

    Même si pas parfait, un meilleur nommage pourrait être :
    getGroupeChequeDejeunerUserList
    (attention d'ailleurs à ne pas trop mélanger anglais et français. Personnellement, j'ai adopté le choxi que tout ce qui est codé doit être en anglais (sauf éventuellement les commentaires)).

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    effectivement, merci bilbo.

    pour le franglais, c'est malheureusement une habitude qui n'est pas qu'informatique :/

    et de toute, un save à chaque user, c'est pas top, je pense que je vais commencer à me créer mon propre formulaire de A à Z.. ouilleouille ouille

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Petite question : que doit faire ton executeListUser ?

    Je vois que tu mets en relation une liste de Users avec une liste de leur CheqDej, mais j'ai du mal à comprendre la finalité de ton action.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    je pense que je vais commencer à me créer mon propre formulaire de A à Z
    C'est possible en effet que ce soit à faire. En tout cas il y a besoin de refactoring, le tout est de déterminer où. D'où ma question

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    en faites, les cheques ne sont pas demandes par les utilisateurs mais par un correspondant.
    Donc chaque correspondant à une liste d'utilisateurs à mettre a jour chaque mois.
    Donc ce que je veut c'est une page où, par ligne j'ai le nom de la personne et le nombre de chqDej que l'on doit lui prendre

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    le nombre de chqDej que l'on doit lui prendre
    Tu lies un user à un formulaire dans ta liste, hors ici tu parles de nombre. Du coup, je comprends d'autant moins l'histoire du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                   $list[$i]['form'] = new ChqDejForm($chq_dej);
    Egalement, le nombre de chèques que tu dois lui prendre, est-il spécifique à chaque utilisateur ? Car dans ce cas il doit exister une relation entre les deux.

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    en effet le nombre est changeant suivant le mois et la personne.
    En faite je saisie les abscences du mois précédent et je defalque du nombre total qu'il veut.
    En gros, j'en veut 20 mais j'ai été absent 3 jours le mois d'avant donc j'en aurait 17

    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
    ChqDej:
      tableName: cheqdej
      columns:
        user_id: 
          type: integer
        date:
          type: timestamp
        conges:
          type: integer
        maladie:
          type: integer
        professionel:
          type: integer
        nbChq:
          type: integer
      indexes:
        Unique1:
          fields: [user_id, date]
          type: unique
      relations:
        User:
          class: sfGuardUser
          local: user_id
          foreign: id
          foreignAlias: ChqDejs
          onDelete: CASCADE
    pour cela que je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $chq_dej->setUserId($user->getId());
                   $chq_dej->setDate("2010-11-05");
                   $list[$i]['form'] = new ChqDejForm($chq_dej);
    ensuite pour la gestion des groupe, c'est juste un champ dans sfGuardUser.
    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
    sfGuardUser: 
      actAs: [Timestampable]
      columns:
        first_name: string(255)
        last_name: string(255)
        email_address:
          type: string(255)
          notnull: true
          unique: true
        username:
          type: string(128)
          notnull: true
          unique: true
        algorithm:
          type: string(128)
          default: sha1
          notnull: true
        salt: string(128)
        password: string(128)
        is_active:
          type: boolean
          default: 1
        is_super_admin:
          type: boolean
          default: false
        last_login:
          type: timestamp
      ......
        grpe_chq_dej_list_id: 
          type: integer
       .....p

  8. #8
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Je pense que ce que veux erictomcat est une sorte de liste de saisie permettant de saisir le nombre de chèque d'un groupe de personnes, un peu comme dans un tableau de calcul

    Nom Prénom Nb. Chèque
    Nom1 Prénom1 [ 12 ]
    Nom2 Prénom2 [ 6 ]
    Nom3 Prénom3 [ _ ]
    Nom4 Prénom4 [ ]
    Nom5 Prénom5 [ ]
    [submit]
    Je me demande si un formulaire simple (sfFormSymfony constitué d'une série de formulaire embed représentant chaque ligne et de type sfFormDoctrine ne permettait pas d'y arriver.

    On aurait un truc dans le genre (non testé et ne marchera pas ainsi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public function configure()
    {
       $users = objetModeleChef->getUsers()
       foreach ($users as $user )
       {
          $this->embedForm( new saisieTickeMoisForm( $user ) )
       }
    }
    Maintenant, la question que je me pose est, comment sauver les données des formulaire "embed" si le formulaire parent n'est pas un sfFormDoctrine...

    Il faudrait peut-être essayer avec un sfFormDoctrine non lié à un enregistrement à l'origine, ou alors de dériver l'objet sfFormDoctrine pour arriver au résultat lors de la sauvegarde.

    Bon, c'est juste une petite idée à partir de votre discutions.

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Désolé, mais je ne comprends pas du tout ton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $chq_dej->setUserId($user->getId());
    $chq_dej->setDate("2010-11-05");
    $list[$i]['form'] = new ChqDejForm($chq_dej);
    Soit tu pars d'un chèque déjeuner, et dans ce cas tu peux avoir le User associé :
    Soit tu pars d'un User et tu peux avoir ses chèques associés :
    Soit, dernière solution, tu veux affecter un nouveau chèque à ton utilisateur. Dans ce cas, tu pars de ton utilisateur et tu passes par la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class User
    {
      public function addCheque($cheque)
      {
        $cheques = $user->getChqDejs();
        $cheques = $cheques->add($cheque);
        $user->setChqDejs($cheques);
      }
    }
    (quelque chose du genre. Vérifier notamment la méthode pour ajouter un élément à une Doctrine_Collection)

  10. #10
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    bein la c'est moi qui est mal au crane (en même temps, j'ai la crève).

    le scénario est:
    tout les mois, une personne doit saisir pour un groupe de personnes leurs jours d'absence (scindé en deux: congés, déplacement professionnels) et le nombre de chèque déjeuner que la personne veut.

    pour cela j'ai une table qui régit les groupes (n° du grpe, responsable, suppléant), un champ dans la table user qui indique dans quels groupes, la personne se trouve, et une table ou j'enregistre par mois, les absences et nombre de chèque déjeuner par personne.

    Donc pour le moment je partait sur un formulaire par groupe de personne ou chaque formulaire correspond à un groupe et chaque ligne à une personne.

  11. #11
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Un peu ce que j'écrivais (soigne bien ta crève pour pas nous contaminer, il parait que les virus peuvent circuler dans les ordinateurs )

    Ce qu'il faut c'est un form pour le groupe avec des embed pour les salariés membre du groupe, même si tu n'affiches ni ne modifie aucun champ global au groupe.

  12. #12
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    pour cela que j'avais une table Groupe->personnes au lieu d'un champ dans la table User, cela me créait le form direct

  13. #13
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Pourrais-tu faire un schéma de ce que tu imagines comme form et comme liste ?

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Peut-être plus simple à faire (et qui ne te fait pas créer une table d'association en plus spécifique à ton besoin) : créer une liste de personnes avec pour actions à implémenter :
    - setConges ;
    - setDeplacementProfessionnel ;
    - setTicket.

  15. #15
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    en gros c'est ça, mais la ou je pêche, c'est si je doit tout coder a la mimine ou bien symfony peut m'en faire un bout ?

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Je n'ai pas été confronté moi-même à cette problématique, mais si je devais la faire, je le ferais de façon semi-automatique :
    - générer le module avec l'admin-generator ;
    - créer des partials affichant les widgets qu'il te faut (partials appelés par les list_td_xxx) ;
    - ajouter dans la section "list" une action "save" (et implémenter donc cette action dans ton actions.class.php).

    Il y a peut-être mieux comme méthode, mais celle-ci devrait marcher.

  17. #17
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    le module, tu le crée sur quel base, la table ou je gere les cheques déjeuner par personne ?

  18. #18
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    L'entité que tu veux gérer, ce sont les personnes. Donc je créerais la liste dessus.

    La définition de tes relations te permet, à partir d'un User, d'obtenir les différents champs : chèque déjeuner, etc.

    Reste la partie un peu plus délicate : créer les partials pour afficher tes widgets de chaque champ, implémenter l'action executeSave() qui te sauvegarde les données pour une ligne donnée.


    Mais comme je te l'ai dis, c'est juste une idée à la volée. Peut-être quelqu'un aura-t-il une méthode plus carrée ?

  19. #19
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    y a t il moyen, en partant d'un formulaire indépendant, de grouper tout les formulaire doctrine (basé sur la table chqDej) d'une liste avec un embed par exemple ?

  20. #20
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    bon je pense avoir trouvé une solution, elle a besoin d'être refactoriser, mais elle fonctionne.
    donc je part d'une action dans le module GrpeChqdej, ce qui me permet d'avoir l'id du groupe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function executeUserList(sfWebRequest $request)
      {
      	$list = Doctrine_Core::getTable('sfGuardUser')->getGroupeChequeDejeunerUserList($request->getParameter('id'));
     
      	$this->mainForm= new sfForm();
      	foreach ($list as $i=>$user)
      	{
      		$ChqDej= new ChqDej();
      		$ChqDej->setUserId($user->getId());
      		$form = new ChqDejForm($ChqDej);
      		$this->mainForm->embedForm($i,$form);
    	}
     
      }
    je vais chercher tout les user de ce groupe.
    je crée un formulaire indépendant
    je crée pour chaque user un formulaire sur la table chqdej
    je les embed dans le formulaire indépendant et j'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php use_stylesheets_for_form($mainForm) ?>
    <?php use_javascripts_for_form($mainForm) ?>
     
    <form action="<?php echo url_for('GrpeChqDej/userListNew') ?>" method="post" <?php $mainForm->isMultipart() and print 'enctype="multipart/form-data" ' ?>>
     <?php echo $mainForm ?>
     <input type="submit" value="Save" />
     </form>
    je récupere le résultat dans une action:
    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 function executeUserListNew(sfWebRequest $request)
      {  	
      	foreach($_POST as $i=>$values)
      	{
      		if(!is_array($values)) continue;
      		$chqDej= new ChqDej();
      		$chqDej->setUserId($values['user_id']);
      		$date = array();
      		$date= $values['date'];
      		$date = $date['year'].'-'.$date['month'].'-05';
      		$chqDej->setDate($date);
      		$chqDej->setNbChq($values['nbChq']);
      		$chqDej->save();
    	}
    	$this->redirect('GrpeChqDej/index');
     
      }
    dans lequel je crée un objet chqdej par user et je met a jour !!
    la ce qui me plait pas c'est d'utiliser la variable $_POST directement.

    me reste plus qu'a trouver comment faire si je veut editer un user
    vous en dites quoi ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2006, 20h11
  2. liste sur formulaire
    Par milielf dans le forum Access
    Réponses: 10
    Dernier message: 18/05/2006, 15h35
  3. Liste des formulaires dans ListeBox
    Par gbuxo dans le forum Access
    Réponses: 2
    Dernier message: 08/04/2006, 11h23
  4. contrôle des zones de liste dans formulaire
    Par philpaul dans le forum IHM
    Réponses: 4
    Dernier message: 25/11/2005, 23h28

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