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 :

Personnalisation CRUD - réutilisation [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut Personnalisation CRUD - réutilisation
    Bonjour,

    j’essaie depuis quelques jours de standardiser un CRUD pour plusieurs objets (entity). Je m'explique, il s'agit, comme dans l'excellent tutoriel de se site (lien) de personnaliser l'affichage des formulaires du CRUD. Mais l'objectif est ici de pouvoir ré-utiliser le même code quelque soit l'entity (donc supprimer les références en dur dans le code du type : form.dateNaissance).

    Je pense que le mieux est de mettre en commun les fonctions d'accès du controller du type listeAction, editerAction... ce qui permet d'envoyer au templates les informations dont il a besoin (mais je fais peut être fausse route). Pour cela je butte sur 2 problèmes :
    - comment ajouter simplement des fonctions à plusieurs controller sans les ré-écrire. je pense à l'utilisation de quelque chose du type require_once ou à la modification de la class ContainerAware pour lui ajouter les fonctions listeAction, editerAction... Je ne sais pas ce qui est recommandé et j'ai un peu peur de toucher à la class ContainerAware. Que me conseillez vous ??
    - comment parcourir les champs de l'objet à manipuler pour les afficher dans le template ? J'ai toutes les infos qu'il faut dans un objet form par exemple, mais le problème est d'accéder aux champs (car il sont privés). Je ne sais pas comment récupérer la liste des champs de l'objet... la encore je m'en remets à vos conseils avisés

  2. #2
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    Après pas mal de recherche j'ai trouvé une solution assez pratique en créant une class spéciale pour l'administration (toutes les autres class "extends" cette class pour profiter de ses méthodes). Si quelqu'un est intéressé par plus de détail, posez des questions

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Salut

    Ta solution m’intéresse.

    Peux-tu partager tes fichiers ?

    Merci.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    ta solution m'interese aussi pouvez vous la partager SVP ??

    Merci bien

  5. #5
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    Bonsoir,

    j'ai créé une class admin avec une fonction qui permet de renvoyer tous les getters d'une entity :
    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
     
        public function getAllGetters()
        {
            $methodes = get_class_methods($this);
            foreach($methodes as $methode)
            if($methode != 'getGetters')
            if($methode != 'getAllGetters')
            {
                if(substr($methode,0,3) == 'get')
                {
                    $getters[] = $methode;
                    $var = substr($methode,3);
                    $var = strtolower(substr($var,0,1)).substr($var,1);
                    $vars[] = $var;
                }
            }
            return array($getters,$vars);
        }
    Chaque entity hérite de cette fonction "class XXX extends Admin"

    et j'ai ensuite un contrôler Admin avec les fonctions permettant d'afficher la liste des lignes de la table, de modifier un élément, le supprimer...

    par exemple le code permettant d'afficher toutes les lignes :

    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
     
    public function indexAction($entityname)
        {
            $em = $this->getDoctrine()->getEntityManager();
            $entities = $em->getRepository('MgtBookMainBundle:'.$entityname)->findAll();
     
            $getters = array();
            $vars = array();
            if($entities)
            {
                list($key, $entity) = each($entities);
                list($getters,$vars) = $entity->getGetters();
            }
     
            return $this->render('MgtBookMainBundle:Admin:index.html.php', array(
                'entities'  => $entities,
                'getters'   => $getters,
                'champs'    => $vars,
                'entityname'=> $entityname
            ));
        }
    le tout appel une page d'affichage (commune pour toute les entity) par exemple pour la liste de toutes les lignes :
    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
    37
    38
    39
    40
    41
    42
     
    <table class="tableau_standard">
        <thead>
            <tr>
            <?php foreach($champs as $libelle => $champ): ?>
                <th><?php echo $champ ?></th>
            <?php endforeach ?>
                <th colspan="2">Actions</th>
            </tr>    
        </thead>
        <tbody>
        <?php foreach($entities as $entity): ?>
            <tr>
                <?php foreach($getters as $getter): ?>
                    <?php eval('$Var = $entity->'.$getter.'();'); ?>
     
                    <?php if(!is_object($Var) ): ?>
                        <td><?php echo $Var ?></td>
                    <?php else: ?>
                        <?php if(get_class($Var) == 'Doctrine\ORM\PersistentCollection' ): ?>
                            <td><ul><?php foreach($Var as $objet): ?>
                                <li><?php echo $objet ?></li>
                            <?php endforeach ?></ul></td>
                        <?php elseif(method_exists($Var,'__toString')): ?>
                            <td><?php echo $Var ?></td>
                        <?php elseif(get_class($Var) == 'DateTime' ): ?>   
                            <td><?php echo $Var->format('Y-m-d') ?></td>
                        <?php else: ?>
                            <td><?php echo 'class: '.get_class($Var) ?></td>
                        <?php endif ?>
                    <?php endif ?>
                <?php endforeach ?>
                <td><a href="<?php echo $view['router']->generate('admin_edit', array('id' => $entity->getid(),'entityname' => $entityname)) ?>">
                Modifier
                </a></td>
                <td><a href="<?php echo $view['router']->generate('admin_delete', array('id' => $entity->getid(),'entityname' => $entityname)) ?>">
                Supprimer
                </a></td>
            </tr>
        <?php endforeach ?>
        </tbody>
    </table>
    voila, j'espère que ca vous permettra d'y voir plus clair

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

Discussions similaires

  1. Knockout 3.2.0 : personnalisation, réutilisation et extension
    Par vermine dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/02/2015, 11h24
  2. Peut-on personnaliser ses requêtes avec un CRUD généré ?
    Par beaudelaire dans le forum ASP.NET MVC
    Réponses: 8
    Dernier message: 18/05/2012, 10h06
  3. Personnaliser un rapport d'erreur sous Windows XP
    Par Neilos dans le forum Windows
    Réponses: 5
    Dernier message: 21/11/2003, 18h13
  4. [FLASH MX2004] Personnaliser les scrollbars
    Par stephane eyskens dans le forum Flash
    Réponses: 10
    Dernier message: 09/10/2003, 12h53
  5. [VB6] [UserControl] Évènements personnalisés
    Par Frankywinky dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2003, 17h56

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