2016-04-09 5 views
2

私のRESTful APIのデフォルトヘッダーコレクションを変更したい。私は私が送信するすべての応答にセット()メソッドを持つヘッダを変更することができますが、私はこれはかなり面倒ですし、私が応答する必要があるとして、私のコントローラのアクションは、長さで成長Yii2 - ヘッダーコレクションを変更する

$response = Yii::$app->response; 
$response->headers->set('X-Powered-By','My server <devel>') 
$response->setStatusCode(somecode); 
$response->data = somedata; 

return $response; 

書きたくはありませんすべての悪い要求とエラー 私はrest/config/main.phpのレスポンスコンポーネントを変更しようとしましたが、ヘッダプロパティを変更することは禁止されています。

  • setStatusCode()メソッドはステータステキストを自動的に返すので、非常に便利です。

助けてください。

+1

コントローラの 'init'メソッドではいつもデフォルトヘッダーを設定することができます。いずれか、またはYii2の 'Request'クラスを拡張してそこに設定する新しいクラスを作ります(おそらく' init'でもそうです)。組み込みのYii2を使うのではなく、カスタムクラスを指すように設定を更新してください –

+0

ありがとうM Sost!これは私が探していたものです。ありがとう。 – macmilan

答えて

0

Mが私に指摘したように、私は正しい道を見つけました。私はyii \ web \ Responseクラスを拡張してヘッダをインクルードしました。

namespace common\components; 

use yii\web\Response; 

class MyResponse extends Response 
{ 
    public $server = 'Project <devel.local>'; 

    public function init() 
    { 
     parent::init(); 
     $this->headers->set('X-Powered-By',$this->server); 
    } 
} 

(これは明らかでない場合)、コンポーネントが.phpのexensionと名前空間に保存する必要があります。

このようにして、自分のクラスをrest \ config \ main.phpレスポンスコンポーネントに追加し、configの$ serverプロパティ値を設定することができます。

.... 
'response' => [ 
    'class' => 'common\components\MyResponse', 
    'format' => yii\web\Response::FORMAT_JSON, 
    'charset' => 'UTF-8', 
    'server' => 'Project <devel.world>', // This line can be added to change 
             // the X-Powered-By header value 
    ], 
], 
.... 
3

レスポンスクラスを拡張する必要はありません。あなたは、これは、すべての応答のヘッダ(複数可)を追加します

return [ 
    ... 
    'components' => [ 
     ... 
     'response' => [ 
      'on beforeSend' => function($event) { 
       $event->sender->headers->add('X-Frame-Options', 'DENY'); 
      }, 
     ], 
     ... 
    ], 
]; 

:例えば、アプリケーションのresponseコンポーネントを設定し、beforeSendイベントにカスタムヘッダーを追加することによってこれを行うことができます。コントローラーごとに行う場合は、コントローラーのafterAction()メソッドで\Yii::$app->response->headers->add($name, $value);を使用できます。

+0

ありがとう。これは非常に便利です。私はしばらくの間、yii2を使用していないが、私は大きなファンです。 – macmilan

関連する問題