Am un formular de configurare pentru un plugin Condiție în care vreau să am ajax. Când selectez din acest câmp, vreau să obțin o listă de afișaje pentru acea vizualizare:
funcția publică buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$views = $this->entityTypeManager->getStorage('view')->loadMultiple();
$opțiuni = [];
/** @var \Drupal\views\Views $view */
foreach ($views ca $view) {
$opțiuni[$view->id()] = $view->label();
}
$form['#prefix'] = '<div id="views-settings">';
$form['#sufix'] = '</div>';
$view_id = $form_state->getValue('view_id');
dacă (gol ($view_id)) {
$view_id = $form_state->getUserInput()["conditions"]["sfp_condition_view_not_empty"]["view_id"] ?? NUL;
}
dacă (gol ($view_id)) {
$view_id = $this->configuration['view_id'] ?? NUL;
}
$displays = isset($view_id) ? $this->getViewsDisplays($view_id): [];
$form['view_id'] = [
'#type' => 'selectați',
'#title' => $this->t('Vizualizare'),
'#required' => TRUE,
'#options' => $opțiuni,
'#default_value' => $view_id ? $options[$view_id] : '',
'#ajax' => [
'wrapper' => 'setări-vizionări',
'callback' => '::updateViewsDisplay',
'eveniment' => 'schimbare',
],
];
dacă (!gol ($afișează)) {
$form['view_display'] = [
'#type' => 'selectați',
'#title' => $this->t('Vizualizați afișajul'),
'#required' => TRUE,
'#options' => $afișează,
'#default_value' => $afișează[$this->configuration['view_display']] ?? $displays['default'],
];
}
returnează $form;
}
/**
* Reconstituirea formularului de declanșare.
*
* @param matrice $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
* @return matrice
*/
funcția publică updateViewsDisplay(matrice $form, FormStateInterface $form_state) {
returnează $form;
}
Xdebug merge bine metoda, dar primesc această eroare AJAX:
„Reapelul #ajax specificat este gol sau nu poate fi apelat.”
si nu se intampla nimic dupa aceea.
Am verificat în altă parte unde am făcut acest lucru și singura diferență pe care o pot vedea este că cele care au funcționat sunt formularele obișnuite Drupal Form API, iar acesta este un formular plugin transmis de la buildConfigurationForm. În afară de asta, nu văd problema.