Comment rendre ZF2 délai de réponse JSON?
Jusqu'à présent, j'ai compris comment faire pour retourner un typique réponse JSON dans Zend Framework 2. Tout d'abord, j'ai ajouté le ViewJsonStrategy
à la strategies
section de la view_manager
de configuration. Alors, au lieu de retourner un ViewModel
exemple de l'action du contrôleur, je reviens un JsonModel
instance avec toutes mes variables.
Maintenant que j'ai compris que le morceau, j'ai besoin de comprendre comment rendre la vue et de le retourner à l'intérieur de cette réponse JSON. Dans ZF1, j'ai été en mesure d'utiliser $this->view->render($scriptName)
, qui a retourné le code HTML comme une chaîne de caractères. Dans ZF2, le Zend\View\View::render(...)
méthode renvoie void
.
Donc... comment puis-je rendre une vue HTML de script et de le retourner dans une réponse JSON dans une requête?
C'est ce que j'ai en ce moment:
if ($this->getRequest()->isXmlHttpRequest()) {
$jsonModel = new JsonModel(...);
/* @todo Render HTML script into `$html` variable, and add to `JsonModel` */
return $jsonModel;
} else {
return new ViewModel(...);
}
- Hé, je suis juste de retour à elle depuis que je suis à elle, aussi. Quel est exactement votre problème? Lorsque vous revenez à un jsonModel(array($data)), alors la réponse est json. Vous ne voulez pas rendre toute vue ou que ce soit lors d'un retour json Oo
- J'ai besoin de rendre une vue partielle à l'intérieur de la réponse JSON. Exemple:
{"html":"<tr><td>I'm an HTML response</td></tr>"}
.
Vous devez vous connecter pour publier un commentaire.
OK, je crois que j'ai enfin compris ce que vous faites. J'ai trouvé une solution qui je pense correspond à vos critères. Mais je suis sûr qu'il y a place à l'amélioration, car il y a une méchante travail manuel à faire...
Comme vous pouvez le voir, le templateMap j'ai créer est ... méchant ... c'est ennuyeux et je suis sûr qu'il peut être amélioré en un peu. C'est une solution de travail, mais tout simplement pas propre. Peut-être que de toute façon on serait en mesure de saisir l', probablement déjà instancié, par défaut PhpRenderer de la ServiceLocator avec son modèle - et le chemin de cartographie et ensuite, il devrait être plus propre.Grâce à l'observation ot @DrBeza le travail qui doit être fait peut être réduit par un montant équitable. Maintenant, comme je l'avais initialement souhaité, nous allons saisir le viewrenderer avec tous les modèle de cartographie intacte et simplement rendre le ViewModel directement. Le seul facteur important est que vous devez spécifier le nom de modèle pour le rendu (par exemple: "$module/$controller/$action")
J'espère que cela vous aidera à démarrer bien 😉
PS: Réponse ressemble à ceci:
get('viewrenderer')
avecget('ZfcTwigRenderer')
Vous pouvez utiliser plus de moyen facile de rendre la vue pour votre réponse JSON.
Veuillez noter avant de l'utiliser JsonModel classe vous avez besoin pour la configuration du Gestionnaire de vues d'en module.config.php fichier de votre module.
c'est un travail pour moi et j'espère qu'il vous aider.
Dans ZF 3 vous pouvez obtenir le même résultat avec ce code
MyControllerFactory.php
MyController.php
Comme d'habitude cadre développeur mess chose à propos de l'AJAX à la suite de la règle simple pourquoi si peut-être complexe, Ici, est la solution la plus simple
dans le script de contrôleur
Cela fonctionne dans ZF1 et ZF2 ainsi
Pas besoin de vue scrpt à tous les
Si vous utilisez conseiller de ZF2 créateur
AJAX suis null en tant que réponse au moins dans zf 2.0.0
{"html":"<strong>I'm an HTML response</strong>"}
.