Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/10/2007, 13h46   #1
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Par défaut Même init() dans tout les controllers

Bonjour,

Je dois initialiser les même variables dans tout mes controllers.

Par défaut je fais un copier coller de tout ce dont j'ai besoin.

Mais en Ror, il est possible de le faire via un helper une seul et unique fois.

Existe-il la même possibilité sur ZF .

D'avance merci.

MaitrePylos
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 13h51   #2
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Tu dois peut-être pouvoir le faire avec un plugin, mais tu peux tout à fait utiliser l'héritage pour résoudre ton problème

Tu crée un controller abstrait (AbstractController par exemple), dans la méthode init tu initialise tout ce que tu veux et tout tes controllers héritent de ce controller abstrait.

Comme ça tu es sûr que tu passes toujours par la méthode init() du controleur parent.

Et si tu veux rajouter quelque chose de propre dans ton controleur, il te suffit de redéclarer init, d'appeller la méthode parente et de rajouter le bon code.

Si tu veux, je peux te donner un exemple ?
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 14h04   #3
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Si je comprend bien
Code :
1
2
3
4
5
6
7
8
 
class AbstractController extends Zend_Controller_Action
{
	function init()
	{
             mon code ...
	}
}
ensuite

Code :
1
2
3
4
5
6
7
8
9
10
 
class IndexController extends AbstractController 
{
 
	function IndexAction()
	{
 
	}
 
}
comme ceci j'obtient une erreur me disant que' la classe abstract n'existe pas?
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 14h09   #4
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
C'est ça, sauf qu'il ne faut pas oublier d'appeller la méthode init parente :

parent::init();

Code :
1
2
3
4
5
6
7
8
class AbstractController extends Zend_Controller_Action
{
	function init()
	{
                          parent::init();
                          mon code ...
	}
}
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 14h16   #5
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
ben heu

Code :
1
2
 
Fatal error: Class 'AbstractController' not found
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 14h21   #6
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Il faut l'inclure

Si le dossier controllers est dans l'include path : tu peux faire comme ça :

Code :
1
2
3
4
5
6
7
8
9
10
Zend_Loader::loadClass('AbstractController');
 
class AbstractController extends Zend_Controller_Action
{
	function init()
	{
                          parent::init();
                          mon code ...
	}
}
Ou tu peux aussi utiliser include.

Sinon, comme tous tes contrôleurs utilisent cette classe, tu peux directement mettre

Code :
Zend_Loader::loadClass('AbstractController');
dans le bootstrap (index.php), c'est encore plus simple
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 14h34   #7
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
SUPER

Merci pour ton aide précise et précieuse.

MaitrePylos
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 14h47   #8
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Citation:
Envoyé par MaitrePylos Voir le message
SUPER

Merci pour ton aide précise et précieuse.

MaitrePylos
Je t'en prie

Si tu as résolu ton problème, n'oublie pas de l'indiquer avec le bouton
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 14h47   #9
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
SUPER

Merci pour ton aide précise et précieuse.

MaitrePylos
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2007, 09h20   #10
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 426
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 426
Points : 2 813
Points : 2 813
Je déconseille d'appeler la classe AbstractController
en effet dans ZF les nom XxxxxController sont des controller potentiellement instanciable par le dispacher

pour être conforme avec la nomenclature ZF et éviter ce petit inconvénient mieux vaut l'appeler Controller_Abstract ou quelque chose du genre.

ça ne change rien au principe énoncé si dessus
pour ma part j'ai suivit l'appellation de ZF
Zend_Controller_Action => App_Controller_Action => MyController
A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2007, 11h51   #11
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Bonjour, et toujours dans le même ordre d'idée comment surchagé une méthode?
Code :
1
2
3
4
5
6
7
8
9
 
class AbstractController extends Zend_Controller_Action
{
	function init()
	{
             $toto = new UneNouvelleClasse();
             $toto->maMethode(2);
	}
}
Code :
1
2
3
4
5
6
7
8
9
10
11
 
class IndexController extends AbstractController 
{
 
	function Init()
	{
            parent::init();
            $this->toto->maMethode(3) //ceci ne fonctionne pas
	}
 
}
Merci de votre aide.
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2007, 12h01   #12
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Je vois pas en quoi c'est de la surchage

Tu veux juste accéder à la variable toto défini dans la classe parente ?

Si tu déclares toto en variable de classe dans abstractcontroller, ca ne marche pas ?

Code :
1
2
3
4
5
6
7
8
9
10
 class AbstractController extends Zend_Controller_Action
{
	public $toto;	
 
	function init()
	{
             $this->toto = new UneNouvelleClasse();
             $this->toto->maMethode(2);
	}
}
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2007, 15h26   #13
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Merci
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2007, 20h49   #14
Membre régulier
 
Inscription : juillet 2002
Messages : 149
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 149
Points : 80
Points : 80
Vous le placeriez ou dans votre projet ce fichier ?
Je pense à créer un autre dossier library interne au projet, j'ai un dossier externe library que j'inclus dan sle path, ce dossier est commun à plusieurs projets en faite. Je ne vois pas sa place dan sle dossier models non plus donc je pense crée un dosier library interne. Qu'en pensez vous ?

Sinon est ce qu el amethode de surcharge est la seul ? On ne peut pa sle faire avec un helper ? En fait moi j'ai un menu que j'aimerai mettre dans tous les controllers.

Voilà merci d'avance pour vos réponses
SQUAL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 08h06   #15
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Perso, j'ai un répertoire /inc, qui reprend toutes mes classes supplémentaires et qui ne sont pas fourni par ZF, je pense à Writeexcel par exemple(que j'inclus dans le path naturellement) .

Si tu utilise le mvc, pour ton menu, il suffit de l'intégrer dans un fichier 'header.phtml', qui se trouveras dans le répertoire scripts et que tu appelles dans toutes tes vues.

Voici un tuto bien expliqué
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 10h22   #16
Membre régulier
 
Inscription : juillet 2002
Messages : 149
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 149
Points : 80
Points : 80
Oui je vais plutot le nommer autrement que library, oui pourquoi pas inc. Pour l emenu en fait je le genere via le cache d'une requete. Je le genere dynamiquement. J'ai crée un script pour gérer le menu.
Donc j'appelle le menu dans le controller et je l'envoi à la vue Header. Le fait de le mettre dan sle init() est un plus je peut envoyer des variable à d'autre vue que le header, soit le footer ou dan sle contenu pratique pour le chemin de fer du site.

Je ne sai spas si c'est correcte mais bon ca marche. Je verrais après pour tout ce qui ets optimisation.
SQUAL est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h55.


 
 
 
 
Partenaires

Hébergement Web