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

Zend Framework PHP Discussion :

Créer une partie ajout / modification / suppression [ZF 1.7]


Sujet :

Zend Framework PHP

  1. #1
    Membre actif Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Points : 240
    Points
    240
    Par défaut Créer une partie ajout / modification / suppression
    Bonjour aux forum,

    En rapport direct avec le sujet de Julien pauli: http://g-rossolini.developpez.com/tu...ge=modele#LV-I

    j'ouvre ce post pour traiter d'un point récurrent lors du développement d'un back office. Il est construit très simplement :

    |-article
    |--- ajout
    |--- modification
    |--- suppresion
    |-utilisateur
    |--- ajout
    |--- modification
    |--- suppresion
    etc etc

    Prenons l'exemple d'un article :


    Toutes ces fonctions seront 'quasiment' les mêmes pour chacune des pages du back off, dés lors je souhaite utiliser une même fonction dans mon controller, se différencie par l'appel du lien.

    Prenons l'exemple de la fonction suppression :

    AdminController.php
    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
     
    ..
    public function deleteAction()
        {
            $this->view->title = "Supprimer un article";
    		$id = $this->_request->getParam('id',0);
    		$mod = $this->_request->getParam('mod');
       	 	$this->view->mod = $mod;
    		if ($id > 0) {
       	 		switch($mod)
       	 		{
       	 			case 'accueil':
    		   	 		$accueil = new Accueil();
    		            if($accueil){
    		                $where = 'idAccueil = ' . $id;
    			            $accueil->delete($where);
    			            $this->view->message = "L'article a été correctement supprimé"; 
    			            $this->_redirect('/admin/index');
    			        }else{ $this->view->message = "Erreur de suppression"; }
       	 				break;
                                     case 'utilisateur': break;
                                     case 'article': break;
       	 		}
    		} 
        }
    Que j'appel ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $this->url(array("controller"=>"admin","action"=>"delete","mod"=>"accueil","id"=>$cle->idAccueil));
    Mais, avec cette facon de coder, je vais me retrouver avec des centaines et centaines (redondantes) de lignes dans mon controller.
    - Alors, dois je créer une aide d'action ?
    - De plus, lorsque je click sur mon lien suppression, je fais appel à une fonction de AdminController, que je suis obligé de déclarer en deleteAction, donc je créé une vue action.phtml, qui ne contient rien. Moi je souhaiterai uniquement une fonction delete() ?

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Il me semble que ton action 'delete' fait beaucoup de choses qui auraient plus leur place dans le modèle...

    Pourquoi ne pas créer par exemple dans ta classe 'Accueil' une méthode 'delete($id)' (et faire de même pour tes autres tables) ?
    Cette méthode pourrait réaliser la suppression et lancer une exception en cas de problème...

    Ton action pourrait alors être réduite à quelques lignes (non testées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $model = ucfirst($mod); // il serait largement préférable de valider puis filtrer le paramètre, mais c'est une autre histoire... ;)
    try
    {
        $table = new $model();
        $table->delete($id);
    }
    catch... // traitements différents en fonction du type d'exception rencontrée

  3. #3
    Membre actif Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Points : 240
    Points
    240
    Par défaut
    Bonjour,

    Merci pour la réponse.

    J'ai suivi vos conseils, voici comment pourrait se décomposer ma nouvelle fonction :
    AdminController.php
    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
     
    ...
        public function deleteAction()
        {
            $this->view->title = "Supprimer";
    		$id = $this->_request->getParam('id',0);
    		$mod = $this->_request->getParam('mod');
       	 	//a valider & filtrer 
       	 	$module = ucfirst($mod); 
    		try
    		{
    		    $table = new $module();
    		    $table->deleteOne($id);
    		    $this->view->message = "L'article a été correctement supprimé"; 
    		    $this->_redirect('/admin/'. strtolower($module) );
    		}
    		catch(Exception $e){
    			$this->view->message = "Erreur de suppression";
    		}
        }
    Accueil.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
      public function deleteOne($id){
      	return $this->delete('idAccueil = ' . $id);
      }

  4. #4
    Membre actif Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Points : 240
    Points
    240
    Par défaut
    Bonjour aux forums,

    Sur le même modèle que le code de Eusebe, présenté ci dessus, j'ai développé une fonction 'update' :

    AdminController.php
    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
     
    ...
    public function editAction()
    	{
            $this->view->title = "Editer un article";
    		$id = $this->_request->getParam('id',0);
    		$mod = $this->_request->getParam('mod');
    		$module = ucfirst($mod);
    		$formulaire = ucfirst($mod) . "Form";
    		try
    		{
    			$form = new $formulaire();
    			$table = new $module();	
    			//modification en bd
    			if ($this->_request->isPost()) {
    				$formData = $this->_request->getPost();
    			    if ($form->isValid($formData)) {
    			    	$table->updataOne($id, $formData);
    			    	$this->view->message = "UPDATE"; 
    		    		$this->_redirect('/admin/'. strtolower($module) );
    			    }
    			}else{
    				//insertion des donnees dans le formulaire
    				$acc = $table->getAccueil($id);
    				$form->populate($acc->toArray());
    			}  
    		}
    		catch(Exception $e){
    			$this->view->message = "Erreur";
    		}
    		$this->view->form = $form;
        }
    Accueil.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ...
      public function getAccueil($id){
    	return $this->find($id)->current();
      }
      public function updateOne($id, $data){
      	$acc = $this->find($id)->current();
      	$acc->titre = $data[0];
      	$acc->resume = $data[1];
      	return $acc->save();
      }
    Mais, il me reste petit soucis

    Le 1er, ma fonction : updataOne($id, $formData); recoit le tableau, hors je lui passe le tableau du $form qui à la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Array
    (
        [titre] => test
        [resume] => test
        [envoyer] => envoyer
    )
    ce que je ne trouve pas très propre, car il y a le parametre envoyer dans le tableau, meme si je ne l'utiliserai pas

    Mon deuxieme soucis se situe du côté du model. Ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      public function updateOne($id, $data){
      	$acc = $this->find($id)->current();
      	$acc->titre = $data[0];
      	$acc->resume = $data[1];
      	return $acc->save();
      }
    n'est pas automatisé

    Merci pour tous conseils

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 07/07/2010, 17h30
  2. Créer une partie 2D
    Par r0seBa dans le forum Windows Forms
    Réponses: 0
    Dernier message: 01/02/2010, 19h46
  3. Réponses: 23
    Dernier message: 28/09/2007, 14h16
  4. Recherche classe pour ajout/modif/suppression d'articles dans une base de donnée
    Par will89 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/02/2007, 12h59

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