Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-04-2010 16:36:56

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Zend_View_Helper ou Zend_Action_Helper ?

Bonjour,
J'ai un layout dans lequel j'inclus:
echo $this->partial('liste-candidats.phtml','candidat');

Code:

<select id='candidat_id' name='candidat_id' onchange='alert();'>
<?php foreach($this->layout()->candidatures as $candidat) { ?>
<option value='<?php echo $candidat->id; ?>'><?php echo $candidat->pseudo; ?></option>
<?php endforeach; ?>
</select>

Il s'agit d'un menu déroulant affichant une liste d'utilisateurs provenant de ma base de données.

Code:

class Model_TCandidatTable extends Doctrine_Table
{
    public function getCandidatures($membre_id) {
        $q = Doctrine_Query::create()
            ->select('c.id,c.id_site,c.id_groupe,c.id_sexe,c.naissance,c.pseudo,c.statut_annonce,c.date_inscription,c.date_derniere_connection')
            ->from('Model_TCandidat c')
            ->where('c.membre_id = ?',$membre_id);
        $results = $q->fetchArray();
        $q->free();
        return $results;
    }
}

Actuellement je l'appelle ainsi dans mon bootstrap:

Code:

$candidatTable = Doctrine_Core::getTable('Model_TCandidat');
$listeCandidatures = $candidatTable->getCandidatures(Boo_Auth::get('id');
$view->layout()->candidatures = $listeCandidatures;

Cela fonctionne parfaitement.
Mais j'aimerais utiliser un composant indépendant (car mon bootstrap grossit trop) et je ne sais pas koi et comment le mettre en oeuvre.

Dois je utiliser:
- un helper d'action ?
- un helper de vue ?
- un plugin ?
- autre ???

Merci de votre aide

Dernière modification par booradley (13-04-2010 16:38:11)

Hors ligne

 

#2 14-04-2010 13:08:21

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Zend_View_Helper ou Zend_Action_Helper ?

Apparemment personne réagit. Soit j'ai mal expliqué soit personne ne sait soit la réponse à ma question est trop évidente.
Je viens d'avoir un début de réponse en apprenant que les vues pouvaient accéder aux models (à condition que ce soit en lecture seulement). C'est Matthew qui le dit donc y'a pas à discuter ;-)

"Views in MVC are allowed to communicate with the Model (using read-only operations), and are allowed to perform display-related logic. That said, how do you actually access the model? And what if you have some fairly complex logic that you may need to repeat, or which you may not want to display directly in the view in order to keep it clean and easy to read? In Zend Framework, the answer is to use View Helpers. "
http://devzone.zend.com/article/3412

Donc la logique veut que j'utilise un View_Helper.
Si vous avez des commentaires, je suis preneur ;-)

A+

Hors ligne

 

#3 14-04-2010 13:17:32

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Zend_View_Helper ou Zend_Action_Helper ?

Et voici l'exemple qui répond parfaitement à ma question:

http://inchoo.net/zend/zend-framework-c … ew-helper/

J'espère que ca aidera ...

David

Hors ligne

 

#4 14-04-2010 20:45:18

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Zend_View_Helper ou Zend_Action_Helper ?

Cette approche est appelée MVC pull.
Voici une explication claire de Julien Pauli (http://julien-pauli.developpez.com/tuto … ontroleur/):
"Il est possible que la vue accède au modèle. C'est un choix architectural qui devra être bien réfléchi, car il impose un plus fort couplage et un mélange des couches. On appelle ça l'approche pull. C'est souvent réservé aux opérations légères, comme par exemple afficher une liste de catégories d'éléments quelconques ; et aux opérations de lecture uniquement.
L'approche inverse, appelée push, interdit à la vue d'accéder au modèle. En général, on utilise les 2 choix en même temps : une instruction de lecture simple (récupérer la liste des membres) sera demandée directement par la vue, ou un de ses sous-composants.
En revanche une opération de modification du modèle, sera demandée par un contrôleur."

Une explication de Wikipedia (http://en.wikipedia.org/wiki/Web_applic … Pull-based):
"Most MVC frameworks follow a push-based architecture. These frameworks use actions that do the required processing, and then "push" the data to the view layer to render the results.[3] Struts, Django, Ruby on Rails and Spring MVC are good examples of this architecture. An alternative to this is pull-based architecture, sometimes also called "component-based". These frameworks start with the view layer, which can then "pull" results from multiple controllers as needed. In this architecture, multiple controllers can be involved with a single view. Struts2, Tapestry, JBoss Seam, Wicket and Stripes are examples of pull-based architectures."

Enfin un exemple d'utilisation MVC push encore proposé par Julien Pauli:
http://julien-pauli.developpez.com/tuto … nd-layout/

Il s'agit d'appeler un controlleur via la vue (ou le layout):

Code:

<?php echo $this->action('gauche','login') ?>

Code:

<?php
class LoginController extends Zend_Controller_Action
{
   public function gaucheAction()
   {
       $auth = Zend_Auth::getInstance();
       if ($auth->hasIdentity())
       {
        $this->view->identity = $auth->getIdentity();
        $this->render('hello');
       }else{
        $this->render('form');
       }
   }
}

Bien que cette approche me semble bizarre (c'est la vue qui appelle le controlleur), je la préfère à l'approche pull qui permet à la vue d'accéder au modèle.

J'en ai fini, j'ai fait les questions et les réponses ;-)
C'est un sujet passionnant.

Quoiqu'il en soit, Zend permet les 2 approches.

A+

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