AJAXコールバックを起動しようとしています。これはとても簡単なことですが、DrupalのフォームをデバッグしようとしていますAJAX APIが駆動しています私の頭がおかしいです。この時点で、見直すために新しい目が必要です。現在、ボタンを押すと、ページが更新され、AJAXコールバックが呼び出されることはありません。次のコードでビルドされているフォーム:
class OnlineRevenueForm extends FormBase {
public function buildForm(array $form, FormStateInterface $form_state) {
$form['resetbutton'] = array(
'#type' => 'submit',
'#value' => $this->t('Submit'),
'#prefix' => '<div class="buttons">',
'#suffix' => '</div>',
'#ajax' => array(
'callback' => 'Drupal\revenue_projection_model\Controller\RPMController::ResetFields',
'event' => 'click',
'progress' => array(
'type' => 'throbber',
'message' => NULL,
),
)
);
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$form_state->setRebuild(FALSE);
}
}
コントローラ内で、次のコードを使用してこのフォームをロードします。
class RPMController extends ControllerBase implements ContainerInjectionInterface {
public function rpm() {
// Load the module's template file
$TemplateFilePath = drupal_get_path('module', 'revenue_projection_model') . "/templates/revenue_projection_model.html.twig";
$template = $this->twig->loadTemplate($TemplateFilePath);
//Load Forms
$OnlineRevForm = \Drupal::formBuilder()->getForm('Drupal\revenue_projection_model\Form\OnlineRevenueForm');
$markup = [
'#type' => 'inline_template',
'#template' => $template->render(
['online_rev_form' => $OnlineRevForm]
)
];
return $markup;
}
次に、このフォームはtwigテンプレートファイルを介して表示されます。私が呼び出そうとしているコールバックもコントローラーの内部にあります。
public static function ResetFields(array &$form, FormStateInterface $form_state) {
$ajax_response = new AjaxResponse();
$ajax_response -> addCommand(new AlertCommand("Testing"));
return $ajax_response;
}
pdate 1:コントローラーでフォームが返される方法を更新しました。現在はレンダリングされていないフォームとしてレンダー配列に返されます。
public function rpm() {
$OnlineRevForm = \Drupal::formBuilder()->getForm('Drupal\revenue_projection_model\Form\OnlineRevenueForm');
return [
'#theme' => 'rpm_page',
'#online_rev_form' => $OnlineRevForm
];
}
また、このコードを.moduleファイルに追加しました。
function revenue_projection_model_theme() {
$theme['rpm_page'] = [
'variables' => ['online_rev_form' => NULL],
'template' => 'revenue_projection_model',
];
return $theme;
}