我正在尝试利用 Guzzle 依次发送两个 POST 请求(首先创建一个用户,然后为他们分配一个段),并且我似乎很难访问我在整个过程中定义的变量。
我的功能中有以下:
$data = [
'email' => $email,
];
if (!empty($name)) {
$data['fname'] = $name;
}
$request = $api->postAsync('v1/subscribers', [
'auth' => [$account_data['api_key'], ''],
'headers' => [
'Content-Type' => 'application/json',
],
'body' => json_encode([
'first_name' => $data['fname'] ?? '',
'email' => $data['email'],
]),
]);
$request->then(
function (ResponseInterface $res) {
$api->post('v1/subscribers/' . $data['email'] . '/segments', [
'auth' => [$account_data['api_key'], ''],
'headers' => [
'Content-Type' => 'application/json',
],
'body' => json_encode([
'segment_ids' => [$list_id],
]),
]);
}
);
$request->wait();
变量 $account_data 和 $api 在我的函数中定义得更高,当我使用 Guzzle 创建初始承诺(并且它创建用户)时,我可以访问它们,但是,当我尝试在内部再次使用 $api 时.then()
它告诉我它是未定义的。我如何访问 $api(没有全局)/我在这里缺少什么?
use()
语句显式导入它们。所以你的函数需要看起来像:
$request->then(
function (ResponseInterface $res) use ($api, $data, $account_data, $list_id) {
$api->post('v1/subscribers/' . $data['email'] . '/segments', [
'auth' => [$account_data['api_key'], ''],
'headers' => [
'Content-Type' => 'application/json',
],
'body' => json_encode([
'segment_ids' => [$list_id],
]),
]);
}
);
请参阅:文档中的示例#3。