Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
dans mon application, j'ai plusieurs urls qui servent juste à une donner une réponse à une requête ajax: soit du json, soit du texte brut, mais pas de html.
Du coup, voilà comment je m'y prends:
- un controlleur par "action" (ce n'est peut-être pas le bon terme, mais disons: un controller pour récupérer des données, un autre pour les modifier, un pour se logguer etc).
- pas de layout et pas de view. Le contenu est affiché par depuis le controller par $this->getResponse()->setBody($content). Avant, j'avais des views qui contenaient juste une ligne:
echo $this->content, donc je me suis dit que j'allais m'en passer.
D'où ma première question: est-ce que ça vous semble une bonne idée de procéder comme ça ? Ou bien est-ce qu'il y a mieux à faire ?
Deuxième question: si ma méthode est la bonne, je ferais bien une classe abstraite qui gère le code commun aux méthodes (par exemple $this->_helper->viewRenderer->setNoRender(); $this->_helper->layout->disableLayout();)
mais lorsque je crée un controller, et que j'essaye d'en faire hériter mes autres controllers ça ne fonctionne pas, il ne se chargent pas. Est-ce que je suis obligé d'implémenter mon propre autoloader, ou bien est-ce qu'il y a plus simple ?
merci d'avance.
Hors ligne
Oui, il y a beaucoup mieux.
Utilise l'aide d'action AjaxContext
c'est bizarre, énormément de gens oublié cette aide pourtant bien pratique, j'ai l'impression d'en parlé dans tous mes messages
Hors ligne
Merci de ta réponse.
J'étais déjà tombé sur AjaxContext, mais je ne vois pas du tout comment ça pourrait m'aider:
L'aide d'action ContextSwitch est destinée à faciliter le retour de différents formats de réponse à une requête.L'AjaxContext est une aide spécialisée de ContextSwitch qui permet le renvoi de réponses à XmlHttpRequest.
http://framework.zend.com/manual/fr/zen … textswitch
Or moi, je ne veux pas avoir différents formats de réponses, mais un seul format par type de données. (une réponse json, mais pas de réponse html ni xml par exemple)
Hors ligne
arno a écrit:
Merci de ta réponse.
J'étais déjà tombé sur AjaxContext, mais je ne vois pas du tout comment ça pourrait m'aider:L'aide d'action ContextSwitch est destinée à faciliter le retour de différents formats de réponse à une requête.L'AjaxContext est une aide spécialisée de ContextSwitch qui permet le renvoi de réponses à XmlHttpRequest.
http://framework.zend.com/manual/fr/zen … textswitch
Or moi, je ne veux pas avoir différents formats de réponses, mais un seul format par type de données. (une réponse json, mais pas de réponse html ni xml par exemple)
Nan, mais tu paramètre les ou LE format de retour que tu veux.
L'interêt c'est de ne pas avoir à placer de noViewRender ou de serialisation JSON à droite à gauche..
Le code reste le même quelque soit le format, c'est ca l'intérêt
Hors ligne
arno a écrit:
finalement, ça AjaxContext ne me convenait pas tout à fait. Du coup, j'ai créé ma propre aide d'action.
Merci de m'avoir aiguillé.
Au moins, ca t'as permis de faire ta propre aide d'ction, et ça, C'est le bien !
Hors ligne
Salut,
Un des avantages de ContextSwitch est de permettre de faire de l'ajax non intrusif.
De mon côté je l'utilise en désactivant l'auto-sérialisation :
$contextSwitch = $this->_helper->getHelper('ContextSwitch'); $contextSwitch->setAutoJsonSerialization(false) ->initContext();
Je passe la réponse à la vue qui elle décide ce qu'elle doit afficher que ça soit xxx.json.phtml, xxx.xml.phtml etc..
Ex. pour une vue json :
<?php $this->response->setHeader('Content-Type', 'application/json'); if ($this->monObjet->getNotification()->hasErrors()) : $this->response->setHttpResponseCode(400); // bad request echo $this->json(array( 'data' => $this->monObjet->toJson(), 'errors' => $this->monObjet->getNotification()->getErrors() )); else : $this->response->setHttpResponseCode(201); // ok created echo $this->json(array( 'data' => $this->monObjet->toJson(), 'redirect' => $this->url(array( 'controller' => 'monController', 'action' => 'monAction', 'id' => $this->monObjet->id ), 'default', true) )); endif;
De cette manière les actions de contrôleurs restent valables avec ou sans contextes.
A+ benjamin.
Dernière modification par Delprog (04-06-2010 10:39:36)
Hors ligne
Pages: 1