You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Yii REST API的200/500状态响应添加固定请求头?

在Yii中为指定状态码的响应添加固定请求头

完全可以实现这个需求,Yii提供了响应事件监听机制,能在响应发送前统一处理头信息,不受响应格式(JSON/XML/HTML)影响。以下是两种常用实现方式:

全局生效(所有响应)

在应用配置文件(如config/web.php或config/main.php)中,给response组件绑定afterSend事件回调,在回调中判断状态码并添加固定头:

return [
    // 其他应用配置
    'components' => [
        'response' => [
            'on afterSend' => function ($event) {
                $response = $event->sender;
                // 仅针对200或500状态码添加头
                if (in_array($response->statusCode, [200, 500])) {
                    // 添加自定义固定请求头,按需修改键值对
                    $response->headers->add('X-Custom-Header', 'FixedValue');
                    $response->headers->add('X-API-Version', 'v1.0');
                }
            },
        ],
        // 其他组件配置
    ],
];

这种方式会对整个应用的所有响应生效,不管是REST接口还是普通页面,只要状态码符合条件就会自动添加指定头。

仅针对REST控制器生效

如果只需要给REST API接口添加固定头,可以创建自定义行为类,然后在REST控制器中附加该行为:

1. 创建行为类

在app/behaviors目录下新建CustomHeaderBehavior.php:

namespace app\behaviors;

use yii\base\Behavior;
use yii\web\Response;

class CustomHeaderBehavior extends Behavior
{
    public function events()
    {
        return [
            Response::EVENT_AFTER_SEND => 'addCustomHeaders',
        ];
    }

    public function addCustomHeaders($event)
    {
        $response = $event->sender;
        if (in_array($response->statusCode, [200, 500])) {
            $response->headers->add('X-Custom-Header', 'FixedValue');
            $response->headers->add('X-API-Version', 'v1.0');
        }
    }
}

2. 在REST控制器中附加行为

以UserController为例:

namespace app\controllers\api;

use yii\rest\ActiveController;
use app\behaviors\CustomHeaderBehavior;

class UserController extends ActiveController
{
    public $modelClass = 'app\models\User';

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        // 添加自定义头行为
        $behaviors['customHeader'] = [
            'class' => CustomHeaderBehavior::class,
        ];
        return $behaviors;
    }
}

针对Yii 1.x的实现

如果使用Yii 1.x,可以通过绑定onEndRequest事件实现:

return [
    // 其他应用配置
    'onEndRequest' => function ($event) {
        $response = Yii::app()->response;
        if (in_array($response->statusCode, [200, 500])) {
            $response->headers->add('X-Custom-Header', 'FixedValue');
        }
    },
];

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:50:44