Yii2 components api/controller

When we wrote API, those controllers need to implement the following feature:php

1. return JSON format dataweb

2. sometimes support JSONP format data also.json

3. support stupid low version IEapi

If we set format with Yii2, the low version IE will download the response content as a file.app

Yii::$app->response->format = Response::FORMAT_JSON

  

So I wrote a component for it, any API controller just need to extend it.yii

 1 namespace api\components;
 2 
 3 use Yii;
 4 use yii\web\Response;
 5 
 6 class Controller extends \yii\web\Controller
 7 {
 8     protected $isLowIE;
 9     protected $callback;
10 
11     public function beforeAction($action)
12     {
13         $this->layout = false;
14         $this->callback = Yii::$app->request->get('callback', false);
15 
16         $this->isLowIE = (boolean)Yii::$app->request->get('ie', false);
17 
18         if (!$this->isLowIE && !$this->callback) {
19             Yii::$app->response->format = Response::FORMAT_JSON;
20         }
21 
22         return parent::beforeAction($action);
23     }
24 
25     /**
26      * @param \yii\base\Action $action
27      * @param mixed $result
28      * @return mixed
29      */
30     public function afterAction($action, $result)
31     {
32         $result = parent::afterAction($action, $result);
33         // your custom code here
34         if ($this->isLowIE || $this->callback) {
35             $result = json_encode($result);
36 
37             if ($this->callback) {
38                 $result = $this->callback .'('. $result .')';
39             }
40         }
41         return $result;
42     }
43 }
相關文章
相關標籤/搜索