2014-12-19 62 views
2

我是yiiframework中的新成員。在Yii2 REST API中一起使用JSON和JSONP格式

我想在Yii2 REST API中同時使用JSONP和JSON格式,這意味着如果api調用正常,響應獲取json以及如果使用jsonp ajax調用api,獲得JSONP結果,我在論壇中找不到任何東西或stackoverflow來配置。我如何做到這一點?我在行爲中使用Response::FORMAT_JSON到控制器,但我想在行爲控制器中一起使用Response::FORMAT_JSONResponse::FORMAT_JSONP。如何配置在一起?

回答

2

使用yii\web\Responseformat屬性:

public class YourController extends Controller { 
    /** 
    * json/jsonp witching example 
    */ 
    function actionJson(
     $callback = null 
    ) { 
     // retrieve data to be returned 
     $data = array(
      // your data here 
     ); 
     // set "fomat" property 
     Yii::$app->getResponse()->format = 
      (is_null($callback)) ? 
       self::FORMAT_JSON : 
       self::FORMAT_JSONP; 
     // return data 
     return (is_null($callback)) ? 
      $data : 
      array(
       'data'  => $data, 
       'callback' => $callback 
      ); 
    } 
} 
+1

謝謝,但我不想把代碼放在行動中,我想在行爲部分配置。 – 2014-12-19 13:30:58

0

@turutosiya謝謝。我知道Web響應,但我在REST API控制器中使用此代碼,並且我希望在行爲部分中進行配置,我不希望將響應配置放入一個動作中,在yii和其餘api中它不是必需的,我們可以配置行爲中的格式控制器:我的代碼是:

public function behaviors() 
{ 
    /* 
    * set response header to application/json 
    */ 
    return ArrayHelper::merge(parent::behaviors(), [ 
     'contentNegotiator' => [ 
      'formats' => [ 
       'application/json' => Response::FORMAT_JSON, 
      ], 
     ], 
    ]); 
} 

現在,如何配置格式「在一起」的行爲?如果您使用Response::FORMAT_JSONP,則我們有Response::FORMAT_JSONP所有響應都變爲JSONP,而其他呼叫不起作用。我想如果一個API調用正常發送JSON響應,如果與一個API調用JSONP方法,發送一個JSONP響應。我也想把標題access_token,我不知道如何使用它。 謝謝。