CodeIgniter 4 过滤器 - 退出并响应

Kun*_*Lun 5 php codeigniter codeigniter-4

我有一个使用 CodeIgniter 4 的项目。

我有一个before过滤器:

public function before(RequestInterface $request){

    $auth = $request->getHeader("Authorization");
    if($auth == null){

        $response = Services::response();
        $response->setStatusCode(401);
        $response->setHeader("WWW-Authenticate", "Bearer Token");
        $response->setBody("{\"error\": \"unauthorized\"}");

        exit;

    }

}
Run Code Online (Sandbox Code Playgroud)

如果没有授权,我想停止请求并返回$response给客户端。

现在请求已停止,因为exit.

但作为答案我得到了200 OK并且没有body content

我如何发出exit请求并将其设置$response给客户端?

ViL*_*Lar 5

正如评论中提到的,在 Filter 的 before 方法中返回 Response 对象会阻止控制器的执行。您不需要使用dieexit

public function before(RequestInterface $request){

    $auth = $request->getHeader("Authorization");
    if($auth == null){

        $response = Services::response();
        $response->setStatusCode(401);
        $response->setHeader("WWW-Authenticate", "Bearer Token");
        $response->setBody("{\"error\": \"unauthorized\"}");

        return $response;

    }

}
Run Code Online (Sandbox Code Playgroud)

请注意,不返回任何内容return;不会阻止控制器运行。