重要なフォームデータを別のAPIにPOSTするWebフォームに カスタム送信ハンドラ を使用しています。その部分は機能しますが、RESTエンドポイントがその特定の瞬間(または何でも)に偶然ダウンしている場合など)、送信の成功を妨げるランダムなネットワークエラーが発生する場合があります。
そのような場合、ユーザーがフォームを送信できなかったにもかかわらず、正常に送信されたとユーザーに思わせたくありません。確認ページをカスタムエラーページで上書きするにはどうすればよいですか? drupal_set_message()
を試しましたが、確認ページのどこにも表示されません。
理想的には、watchdog
ロギングによって生成されたイベントIDを取得して、ユーザーがエラーを見たときに電話または電子メールで連絡した場合に役立つ情報を提供できるようにすることもできます。デバッグします。
つまり、要約すると、完璧な世界では、提出に失敗すると次のような結果になります。
die()
とフォームデータのハッシュを一緒にエラーコードとしてハッキングできますが、より適切で適切なDrupal方法はありますか?
これまでの関連コード:
try {
$apiResponse = drupal_http_request($apiEndPoint, [
'headers' => ['Content-Type' => 'application/json'],
'method' => 'POST',
'data' => drupal_json_encode($formData),
'timeout' => 5 // Timeout in seconds.
]);
// I'm not okay :(
if ($apiResponse->code != "200") {
throw new Exception ($apiResponse->data, $apiResponse->code);
}
} catch (Throwable $e) {
watchdog('tfm_custom_form_handlers', "A custom form handler failed: (@code) @message.", [
'@code' => $e->getCode(),
'@message' => $e->getMessage(),
], WATCHDOG_ERROR);
}
助けてくれてありがとう!
他のすべての検証に合格した後、最後に実行される検証関数内にPOST
コードを含めます。
例:_$form['submit']['#validate'][] = 'mymodule_post_to_api';
_
catch
内でform_set_error('form', 'Failed to connect to API, try again later');
を使用します。
POSTのエラーについては、誰かが報告するのを待たないでください。プログラムでDrupal自分またはコードの管理者にフォームフィールドとエラーの詳細を記載した電子メールを送信します。