Yii2 - 更改标题集合

时间:2016-04-09 22:17:00

标签: php yii2

我想更改RESTful api中的默认标头集合。我可以在我发送的每个响应中使用set()方法更改标头,但我不想写

$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中的响应组件,但我禁止更改headers属性,因为它是只读的。

  • setStatusCode()方法非常有用,因为它会自动返回状态文本。

请帮忙。

2 个答案:

答案 0 :(得分:4)

您不需要去扩展响应类。您可以通过配置应用程序的<objects> <object> <TestString1>abc</TestString1> <TestString2>abc</TestString2> </object> <object> <TestString1>&lt;&amp;&gt; Russian: "???? ? ??????"</TestString1> <TestString2>&lt;&amp;&gt; Russian: "слов в тексте"</TestString2> </object> </objects> 组件并在response事件中添加自定义标头来执行此操作,例如:

beforeSend

这将为所有回复添加标题。如果您想为每个控制器执行此操作,可以在控制器的return [ ... 'components' => [ ... 'response' => [ 'on beforeSend' => function($event) { $event->sender->headers->add('X-Frame-Options', 'DENY'); }, ], ... ], ]; 方法中使用\Yii::$app->response->headers->add($name, $value);

答案 1 :(得分:0)

正如M Sost指出的那样,我为我找到了正确的道路。我扩展了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
    ],
],
....