2017-09-01 1 views
1

J'ai créé le module API dans mon application avancée yii2 et ajouté HttpBearerAuth dans le fichier du contrôleur et il fonctionne.Comment changer les touches lable de yii2 réponse API avancée

Sur Unauthorized Je reçois ci-dessous la réponse:

{"name":"Unauthorized","message":"Your request was made with invalid credentials.","code":0,"status":401,"type":"yii\\web\\UnauthorizedHttpException"} 

Je veux changer l'étiquette clé de cette réponse comme ci-dessous:

{"error":"Unauthorized","errorMessage":"Your request was made with invalid credentials.","code":0,"status":401} 

Comment puis-je mettre à jour ces clés?

Répondre

0

Reliez un gestionnaire d'événements à yii \ web \ Response :: EVENT_BEFORE_SEND et examinez l'attribut $ data de la classe yii \ web \ Response. Pas sûr, mais devinez que vous trouverez un tableau où les clés sont exactement celles que vous voulez changer. Vous avez juste besoin de filtrer les réponses que vous voulez gérer (par exemple tout sauf les codes d'état 200 & 201).

Peut-être quelque chose comme ça ... probablement des bugs inclus :-)

Event::on(yii\web\Response::className(), yii\web\Response::EVENT_BEFORE_SEND, function ($event) { 
    if (Yii::$app->response->getStatusCode() > 201) { 
     if (isset(Yii::$app->response->data['name']) { 
      Yii::$app->response->data['error'] = Yii::$app->response->data['name']; 
      unset(Yii::$app->response->data['name']); 
     } 
    } 
}); 
+0

Où ajouter ce code, dans quel fichier? –

+0

Eh bien, ce type de gestionnaire d'événements est attched à la classe elle-même (c.-à-d. "Global"), donc n'importe où avant le déclenchement de l'événement fonctionne. Par exemple dans un contrôleur (n'importe quelle action ou beforeAction) ou dans la configuration bootstrap de votre application. Cela dépend du moment où vous voulez que votre gestionnaire s'exécute. – karpy47

+0

Obtention d'exception 'Class 'backend \ modules \ api \ controllers \ Evénement' not found'. –