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 17/09/2011, 17h47   #1
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
Par défaut appeler une methode depuis un helper ?

Bonjour, j'ai un layout.phtml qui contient 2 parties

partie 1 : le contenu des actions
Code :
1
2
 
 $this->layout()->content;
partie 2 :
Code :
1
2
 
echo $this->moteur();
voici ce qu'il y a dans la methode moteur();

Code :
1
2
3
4
5
6
7
8
9
 
class k_helper_Moteur extends Zend_View_Helper_Abstract {
 
    public function Moteur() {
        echo "je suis moteur.php dans le repertoire 
            library/k_helper/Moteur.php";
    }
 
}
lorque je vais sur la page action index , j'ai bien le mettre
Code :
1
2
3
 
        echo "je suis moteur.php dans le repertoire 
            library/helper/Moteur.php";
dans mon controller index, j'ai une action qui permet de rechercher une personne par exemple, je souhaite donc utiliser cette methode pour l'afficher dans avec la methode moteur()

j'ai donc essayer de l'instancer
Code :
1
2
 
        $rechercher = new IndexController();
cela ne fonctionne pas
Code :
1
2
 
Catchable fatal error: Argument 1 passed to Zend_Controller_Action::__construct() must be an instance of Zend_Controller_Request_Abstract, none given, called in /var/www/myboutik/library/k_helper/Moteur.php on line 8 and defined in /usr/share/php/libzend-framework-php/Zend/Controller/Action.php on line 127
comment je fait pour
appeler une methode d'action (ici mon index controller) depuis mon helper ??

je donne aussi mon boostrap
Code :
1
2
3
4
5
6
7
 
    //charger le menu lateral de recherche de personne
    protected function _initLayout()  {
    Zend_Layout::startMvc(APPLICATION_PATH.'/layouts/scripts');
    $view = Zend_Layout::getMvcInstance()->getView();
    $view->addHelperPath('k_helper','k_helper');
    }
merci de vos réponses ?
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2011, 18h59   #2
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Premièrement, je t'invite à te relire avant de poster un message et par conséquent d'éditer ton message ici.

Je rappel que nous sommes dans un forum communautaire, la langue première dans celui ci est le français, nous pouvons accepter de la part d'étranger que ces derniers écrivent en mauvais français mais même ces personnes prenne la peine d'écrire le mieux possibles et leurs messages sont bien plus compréhensibles que les tiens.
Donc merci de faire un gros efforts, sur ta façon à construire une phrase, je ne parle pas d'orthographe mais du sens que prenne tes phrases (ici aucun sens pour certaines). Cela est une marque de respect par rapport aux personnes qui répondent à tes questions.

Si j'ai bien compris cependant, tu cherche à utiliser une action d'un controller dans un helper.

Je t'invite à consulter http://fr.wikipedia.org/wiki/Mod%C3%...ontr%C3%B4leur, si tu fais ce que tu dis ici tu ne respectera plus le MVC et pour pousser plus loin la chose tu ne respectera aucun type de modélisation.

Si tu désire utiliser une méthode dans un helper qui est la même que dans un controller, il faudrait peut être que cette méthode soit hors du controller et que ce dernier l'appel, ainsi tu pourra appeler cette méthode depuis ton helper également tout en respectant le MVC
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2011, 20h22   #3
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
merci de ta réponse

je suis désoler de m'être mal exprimer, je vais essayer de construire autrement ma question.

Dans la rubrique "démarrage rapide du layout", il y a un exemple qui décrit mon

problème:

Code :
1
2
3
4
5
6
7
 
    <body>
        <div id="nav"><?php echo $this->layout()->nav ?></div>
 
        <!-- rend /foo/index + /comment/fetch -->
        <div id="content"><?php echo $this->layout()->content ?></div>
    </body>
a cette ligne
Code :
1
2
 
        <div id="nav"><?php echo $this->layout()->nav ?></div>
Ce bout de script signifie
On appelle la méthode nav.
Mais comment je peux faire pour que cette fameuse méthode appelle un formulaire de contact par exemple ??

ou un autre exemple
Code :
1
2
3
4
5
6
7
8
 
    <body>
        <!-- rend /nav/menu  la partie menu contient 1 champ de formulaire à remplir -->
        <div id="content"><?php echo $this->layout()->content2 ?></div>
 
        <!-- rend /foo/index + /comment/fetch -->
        <div id="content"><?php echo $this->layout()->content ?></div>
    </body>
peut t'être qu'on ne peux pas le faire ?

si je devais le faire sans me préoccuper de zend sa ressemblerai à ça
Code :
1
2
3
4
5
6
7
8
 
    <body>
        <!-- rend /nav/menu -->
        <div id="content"><?php  include(/controller/action/menu.php ?></div>
 
        <!-- rend /foo/index + /comment/fetch -->
        <div id="content"><?php echo $this->layout()->content ?></div>
    </body>
Dans le schéma du MVC il y un pointiller qui pars de la vu au controlleur,respecte t' on ce schéma en exécutant se script?
ou que ce n'est pas possible car une vue(layout.html est pour moi une vue) ne peut accepter pas plus de deux actions.
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 13h44   #4
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
Bon j'ai trouvé comment appeller une action lorqu'on est dans le layout, c'était bien un helper, mais il fallait mettre le fichier dans views/helpers pour que cela fonctionne

donc voici mon layout
Code :
1
2
3
4
 
<?php echo $this->layout()->content; ?>//on affiche l'action indexAction
<br/>
<?php $this->Gender() ;?>//on demande le helper Gender
donc dans mon indexControlleur j'ai ceci
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
dat<?php
 
class IndexController extends Zend_Controller_Action
{
public function init()
    {
 
    }
 
    public function indexAction()
    {
        echo "je suis indexAction";
    }
}
et dans mon helper Gender j'ai ceci
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<?php
 
class Zend_View_Helper_Gender  extends Zend_View_Helper_Abstract
{
   public function Gender()
   {
       echo "je suis le moteur de recherche";
       $form= new Application_Form_Moteur();
       echo $form;
 
   }
}
 
?>
j'ai donc afficher à l'écran
Code :
1
2
3
 
dat je suis indexAction //==partie 1
je suis le moteur de recherche //=partie moteur de recherche
par contre mon helper n'est pas un controlleur, il n' pas de vu donc un fichier .phtml,
comment je procède pour transmettre le forumaire dans le layout ??
Code :
1
2
3
4
5
6
7
8
 
   public function Gender()
   {
       echo "je suis le moteur de recherche";
       $form= new Application_Form_Moteur();
       echo $form;
 
   }
ici j'ai fait un
j'appelle donc un formulaire qui contient 2 boutons
Code :
1
2
3
4
5
6
7
8
9
10
 
    public function init() {
        $valider = new Zend_Form_Element_Submit("valider");
        $valider->setValue("valider");
        $this->addElement($valider);
 
         $modifier = new Zend_Form_Element_Submit("modifier");
        $modifier->setValue("modifier");
        $this->addElement($modifier);
    }
en faisant echo form j'ai bien mes 2 boutons à l'affiche pas je pense que ce n'est pas MVC, comment peut transmetre me boutons dans la vue qui est un layout ??
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h15.


 
 
 
 
Partenaires

Hébergement Web