Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-04-2008 16:45:31

salma
Membre
Lieu: Tunis
Date d'inscription: 29-02-2008
Messages: 20

Même code dans deux actions

bonjour,
J'ai une application en Zend et MVC.
J'ai créé un controleur et des actions.
Je me trouve obliger de répéter le même code d'une action dans une autre action de même controlleur.
Mais ça augmente la page du controleur.
Comment je fais ça?
Merci


“Un sourire coute moins cher que l'électricité, mais il donne autant de lumière.” big_smile

Hors ligne

 

#2 14-04-2008 19:06:54

ziedb
Membre
Lieu: Tunis
Date d'inscription: 24-03-2008
Messages: 224

Re: Même code dans deux actions

Une des solutions possibles est d'écrire ton code dans un fichier php codecommun.php
et tu fais appel à ce code avec

Code:

require_once('codecommun.php');

qui va inclure les lignes de ton fichier et les exécuter.

Bon travail

Hors ligne

 

#3 14-04-2008 20:08:09

ubini
Membre
Lieu: gillarens/Suisse
Date d'inscription: 23-01-2008
Messages: 110
Site web

Re: Même code dans deux actions

Il fait beau à Tunis ? wink

Code:

class IndexController extends Zend_Controller_Action 
{ 
    public function indexAction() 
    { 
        $this->actionCommune() ;
    }
    public function autreAction() 
    { 
         $this->actionCommune() ;
    }

    private function actionCommune() 
    {
         echo "Hello World !";
    }
}

C'est ça la POO (entre autre) wink


http://www.easyswap.org - site d'échange de biens et de services conçu avec jQuery et Zend Framework
http://www.lambelet.net - mon blog perso et inutile

Hors ligne

 

#4 15-04-2008 09:42:05

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Même code dans deux actions

grrr

il y a pour ça l'héritage.
faire une classe

Code:

class Application_Controllers_Action extends Zend_Controller_Action

à placer dans le dossier conollers
mettre dans cette classe tous les membres et méthodes commune

faire dériver ses controllers de cette classe

Code:

class IndexController extends Application_Controllers_Action

utiliser les méthodes communes

Code:

$this->comonMethod();

cela est très pratique pour l'initialisation des cont^roleurs
placer dans la classe Action une méthode init et faites dedans les initialisations de vos contrôleurs tous en hériteront automatiquement.

A+JYT

Hors ligne

 

#5 15-04-2008 10:59:38

ubini
Membre
Lieu: gillarens/Suisse
Date d'inscription: 23-01-2008
Messages: 110
Site web

Re: Même code dans deux actions

Comme il n'y a qu'un seul controlleur je trouve cela un peu lourd comme méthode, mais c'est aussi une façon de faire.

bonne journée à tous !

Dernière modification par ubini (15-04-2008 11:53:03)


http://www.easyswap.org - site d'échange de biens et de services conçu avec jQuery et Zend Framework
http://www.lambelet.net - mon blog perso et inutile

Hors ligne

 

#6 15-04-2008 16:43:39

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Même code dans deux actions

Je donnais une solution général pour des éléments commun à plusieurs contrôleurs car même si ce n'est pas le cas ici c'est un cas très fréquent

si c'est dans la même action il suffit de faire une méthode
éviter de l'appeler xxAction et de préférence en faire une méthode protected.

Code:

class IndexController extends Zend_Controller_Action 
{ 
    public function indexAction() 
    { 
        $this->_methodeCommune() ;
    }
    public function autreAction() 
    { 
         $this->_methodeCommune() ;
    }

    protected function _methodeCommune() 
    {
         echo "Hello World !";
    }
}

il est parfois utile de dériver un contrôler par exemple lorsqu'on a un module réutilisable pour le spécialiser il suffit de le dériver ainsi on ne fait qu'ajouter des caractéristiques sans avoir à tout refaire.
donc pour pouvoir utiliser et surtout surcharger la _methodeCommune il vaut mieux la mettre protected.

d'une façon générale on mets private ce qui ne peut absolument pas fonctionner si un surcharge venait à changer la chose.

Hors ligne

 

#7 08-04-2009 22:32:25

Harry
Membre
Lieu: Paris
Date d'inscription: 01-04-2009
Messages: 12

Re: Même code dans deux actions

Bonjour,
Un an plus tard je me demande ce que tu voulais dire (Sekaijin) quand tu parlais de "dériver un contrôler par exemple lorsqu'on a un module réutilisable pour le spécialiser".
On fait dériver un controleur d'un autre controleur d'un autre module ? Je suis complètement à côté de la plaque peut-être...
Car la notion de module réutilisable, je vois assez mal comment on la met en oeuvre. En effet, je ne vois pas bien comment utiliser un module depuis les controleurs d'un autre module (forward ?).
Si quelqu'un peut éclairer l'ignorant que je suis... merci.
Harry

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages