2017-05-04 3 views
0

Je fais une api restfull dans cakephp ... Et parfois j'ai quelques exceptions. Par exemple:exception JSON dans cakephp 3

if (!$this->request->is('post')) { 
      throw new MethodNotAllowedException("The requested resource does not support http method " . $this->request->param('_method')); 
     } 

Mon problème est lorsque l'URL est /controller/action.json la réponse est:

{ 
message: "The requested resource does not support http method GET", 
url: "/api/auth/users/authenticate.json", 
code: 405 
} 

En format JSON, mais, quand mon URL est/contrôleur/action. Ma réponse est HTML, je veux savoir s'il est possible de forcer ces exceptions à être toujours json sans mettre .json dans l'url.

Merci!

+0

Vous pouvez spécifier 'application/json' dans l'en-tête de réponse. – TheDude

+0

Vous pouvez utiliser $ this-> RequestHandler-> renderAs ($ this, 'json'); ' –

+0

Je l'ajoute à mon action dans le contrôleur avant de lancer l'exception ... mais sans succès ... L'exception est de rendre comme HTML ... – jaloise

Répondre

0

Dans l'action, procédez comme suit. Comme suggéré dans les notes.

if (!$this->request->is('post')) { 
    $this->RequestHandler->renderAs($this, 'json'); 
    throw new MethodNotAllowedException("The requested resource does not support http method " . $this->request->param('_method')); 
} 

Pour que cela fonctionne, vous aurez également besoin du composant.

public function initialize() { 
    parent::initialize(); 
    $this->loadComponent('RequestHandler'); 
} 
+0

Oui, je le fais dans mon contrôleur ... mais est toujours rendu comme HTML .. Je ne sais pas pourquoi ... – jaloise

+0

@jaloise Mal essayer un peu plus de choses quand je rentre à la maison comme je crois J'ai déjà eu ce travail auparavant. Vous pouvez également écrire directement l'objet de réponse '$ this-> response' au lieu de lancer l'erreur et de laisser Cake le gérer. – KaffineAddict

+0

je l'essaie sans succès. – jaloise

0

Vous pouvez forcer des exceptions à toujours Rendus au JSON ajouter à Controller/ErrorController.php (en beforeRender)

$this->RequestHandler->renderAs($this, 'json');