Я работаю над запросом cURL, когда пользователь отправляет существующую форму для отправки некоторых данных внешней службе.
Я добавил эту функцию с помощью этой строки:
$form['actions'][$action]['#submit'][] = 'my_module_push_data';
И мои запросы cURL:
$ch = curl_init();
// Получить токен доступа здесь
curl_setopt($ch, CURLOPT_URL, 'https://resturl.com&id=' . $id . '&secret=' . $secret);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$результат = curl_exec($ch);
curl_close ($ ч);
$ результат = json_decode ($ результат, правда);
// Затем отправляем данные
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://returl.com/submit.json?access_token=' . $result['access_token']);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($formData));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$server_output = curl_exec($ch); // <--- Эта строка вызывает проблемы
$server_output = json_decode($server_output);
С этим кодом я получаю эту ошибку:
Uncaught PHP Exception LogicException: «Ошибки формы не могут быть установлены после завершения проверки формы». в /mnt/gfs/.../.../docroot/core/lib/Drupal/Core/Form/FormState.php
Я прошел строку за строкой через этот запрос cURL и строку, которую я отметил (вторая curl_exec()
вызывает эту ошибку. Если я опускаю эту строку, все работает нормально. Первое curl_exec()
работает нормально, и я проверил, что он возвращает токен доступа.
Что я здесь делаю неправильно? Спасибо!
РЕДАКТИРОВАТЬ: Полная функция (запутаны некоторые детали)
/**
* Пользовательский обработчик отправки для отправки данных в службу
*/
функция my_module_service_signup(массив $form, \Drupal\Core\Form\FormStateInterface $form_state) {
$vals = $form_state->getValues();
$formData = [];
$myVals = [];
$clientId = Settings::get('service_api_id');
$clientSecret = Settings::get('service_api_secret');
$accountId = 'abc123456';
$formData['unique_id'] = '1234';
$myVals = [
'компания' => $vals['field_company'][0]['value'],
'firstName' => $vals['field_first_name'][0]['value'],
'lastName' => $vals['field_last_name'][0]['value'],
...
];
$formData['input'][0]['fields'] = $myVals;
пытаться {
$getClient = \Drupal::httpClient();
$request = $getClient->post('https://' . $accountId . '.returl.com/get/token?my_id=' . $clientId . '&my_secret=' . $clientSecret);
$response = json_decode($request->getBody());
} поймать (RequestException $ e) {
// LogicException здесь не перехватывается
}
}