मैं ajax कॉल का उपयोग करके ड्रॉपडाउन बॉक्स के आधार पर उपयोगकर्ता को गतिशील रूप से कई फ़ील्ड चुनने की अनुमति देने का प्रयास कर रहा हूं, लेकिन मुझे फॉर्म को फिर से बनाने के लिए ajax कॉल प्राप्त करने के लिए प्रतीत नहीं हो सकता है।
<?php
class AJAXexample extends BlockBase {
public function blockForm($form, FormStateInterface $form_state) {
if (empty($form_state->getValue('number'))) {
$form_state->setValue('number', 3);
}
$form['columnNum'] = [
'#title' => t('Number of Columns'),
'#type' => 'select',
'#options' => [
1 => '1',
2 => '2',
3 => '3',
4 => '4',
],
'#default_value' => $this->configuration['columnNum'],
'#empty_option' => t('-select-'),
'#ajax' => [
'callback' => [$this, 'columnCallback'],
],
];
for ($i = 0; $i < $form_state->getValue('number'); $i += 1) {
$form['column'][$i] = [
$i => [
'#type' => 'details',
'#title' => t('Column '.$numTitle),
'#open' => FALSE,
'columnTitle' => [
'#type' => 'textfield',
'#title' => t('Column Title'),
'#value' => $config[0]['columnTitle'],
],
],
];
return $form;
}
public function columnCallback(array &$form, FormStateInterface $form_state) {
$form_state->setValue('number', 10);
$form_state->setRebuild(true);
return $form;
}
}
Textfields की संख्या form_state चर 'संख्या' पर आधारित है। कॉलबैक कॉलम कॉलबैक form_state वैरिएबल को 10 में बदल देता है, और 'कॉलमनम' फॉर्म फ़ील्ड को बदलने पर निकाल दिया जाता है। हालाँकि फॉर्म को $ form_state-> setRebuild () के बावजूद फ़ील्ड की नई संख्या के साथ दोबारा नहीं बनाया गया है; कहा जाता है। क्या अजाक्स कॉल के बाद पुनर्निर्माण के लिए फॉर्म प्राप्त करने का एक तरीका है?
नोट: मैंने पहले से ही वास्तविक अजाक्स कॉल के अंदर फॉर्म के आइटम को बदलने या अपग्रेड करने जैसी तकनीकों की कोशिश की है, लेकिन जब ऐसा होता है तो बदले हुए क्षेत्रों में कोई भी इनपुट $ form_state के पास नहीं जाता है।
अद्यतन: 4k4 के समाधान का प्रयास करने के बाद मुझे एक त्रुटि मिलती है
Recoverable fatal error: Argument 1 passed to Drupal\Core\Render\MainContent\AjaxRenderer::renderResponse() must be of the type array, null given, called in /Library/WebServer/Documents/aaep/web/core/lib/Drupal/Core/Form/FormAjaxResponseBuilder.php on line 89 and defined in Drupal\Core\Render\MainContent\AjaxRenderer->renderResponse() (line 45 of /Library/WebServer/Documents/aaep/web/core/lib/Drupal/Core/Render/MainContent/AjaxRenderer.php).
विश्वास यह है कि त्रुटि इसलिए होती है क्योंकि $ फॉर्म ['कॉलम'] ब्लॉकफ़ॉर्म फ़ंक्शन में कंटेनर के रूप में बनाए जाने के बावजूद अशक्त लौट रहा है। मैंने कॉलबैक को अन्य तरीकों से कॉल करने का प्रयास किया है
'#ajax' => [
'callback' => '::columnCallback',
]
तथा
'#ajax' => [
'callback' => [$this, '\Drupal\my_examples\Plugin\Block\AJAXexample::columnCallback'],
]
लेकिन मुझे वही त्रुटि मिलती है। उत्सुकता से, जब मैंने कॉलबैक को केवल $ फॉर्म ['कॉलम'] के बजाय पूरे $ फॉर्म को वापस करने के लिए बदल दिया तो यह फॉर्म को दोहराता है (फॉर्म की एक प्रति वर्तमान फॉर्म के नीचे दिखाई देती है) और फिर भी कॉलम की उचित संख्या के बिना।