2012-03-18 3 views
2

j'ai une application de lithium mis en place de cette façon, de sorte que lorsquelithium PHP (LI3) la configuration de réponse automatique avec JSON

return($data) 

est utilisé, il peut soit être utilisée dans le view.html.php de lithium comme

echo $data 

ou si en-tête de demande "accepter" est égal à "JSON/javacript" il retourne quelque chose comme

{ 
data: { a:'b' } 
} 

automatiquement.

Malheureusement dans la nouvelle application que j'ai faite en tant qu'application de test, ce flux ne se produit pas (et seul le HTML est toujours retourné).

Après avoir fait un peu de recherche, il semble que ce qu'il est censé être fait automatiquement si je décommenter

require __DIR__ . '/bootstrap/media.php'; 

intérieur bootstrap.php Mais cela ne fonctionne pas, j'ai encore HTML retourné. J'ai téléchargé une version récente du framework lithium (que j'ai téléchargé il y a 1 ou 2 mois)

Quelqu'un sait si la réponse automatique avec JSON nécessite une configuration ou non?

Répondre

2

prélevé http://dev.lithify.me/lithium/tickets/view/353

qui est ensuite repris à partir de la documentation de lithium

Pour activer la négociation automatique de type de contenu (par exemple la détermination du type de contenu de la réponse en fonction de la valeur de l'en-tête HTTP Accept), mettre le drapeau 'negotiate' à true. Dans le cas contraire, la réponse ne sera basée sur le paramètre de type de l'objet de requête (par défaut de « html » si aucun type est présent dans les paramètres de la requête)

http://li3.me/docs/lithium/action/Controller :: $ _ rendre

Si vous avez besoin de plus d'aide sur la façon de mettre en œuvre laisser un commentaire.

+0

La réponse est correcte merci! Petite addition: pour le faire fonctionner, il faut mettre $ this -> _ render ['negotiate'] = true; code à l'intérieur de la fonction _init d'un contrôleur, si mis à l'intérieur d'une action du contrôleur, il ne fonctionne pas. La version complète du code ressemble à \t protected function _init() { \t \t // l'option negotiate indique à li3 de servir le bon type de contenu \t $ this -> _ render ['negotiate'] = true; \t \t parent :: _init(); \t} – Evgenius

+0

son étrange. Je retourne JSON et je l'ai fait configurer net de cette façon. mais je ne sais rien de spécifique pour le mettre en place, je l'ai juste essayé une fois et cela a fonctionné. J'ai activé media.php – Tomen

+0

@Tomen Je pense que c'est la façon dont la demande de JSON arrive. Explicite dans le contrôleur ou à partir du type de contenu ou dans l'URL. –

2

Il est également possible de définir le type à $ this-> request-> accepts() lors de l'appel de render().

return $this->render(array('type' => $this->request->accepts()));