使用中间件更改cakephp 3的请求

时间:2018-04-02 12:17:22

标签: cakephp middleware cakephp-3.x

我正在尝试实现一个从API读取数据的中间件,稍后将在控制器上使用它。怎么办呢? 我已经制作了一个简单的中间件,我有

public function __invoke(ServerRequestInterface $request, ResponseInterface $response, $next)
{
    $dataFromApi = curl_action....
    $request->dataFromApi = $dataFromApi;
    return next($request, $response);
}

稍后在控制器上我希望使用

访问这些数据
public function display(...$path)
{
    $this->set('dataFromApi', $this->request->dataFromAPI);
}

1 个答案:

答案 0 :(得分:1)

查看\Psr\Http\Message\ServerRequestInterface API,您可以使用ServerRequestInterface::withAttribute()将自定义数据存储在属性中:

// ...
// request objects are immutable
$request = $request->withAttribute('dataFromApi', $dataFromApi);
// ...
return next($request, $response);

并通过ServerRequestInterface::getAttribute()相应地读入您的控制器:

$this->set('dataFromApi', $this->request->getAttribute('dataFromApi'));

另见