আমি এজ্যাক্স কলটি ব্যবহার করে একটি ড্রপডাউন বক্সের উপর ভিত্তি করে ব্যবহারকারীকে গতিশীলভাবে বেশ কয়েকটি ক্ষেত্র বেছে নেওয়ার অনুমতি দেওয়ার চেষ্টা করছি, তবে পরে ফর্মটি পুনর্নির্মাণের জন্য অজ্যাক্স কলটি পাবে না বলে মনে করি।
<?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;
}
}
পাঠ্যক্ষেত্রের সংখ্যা form_state ভেরিয়েবল 'সংখ্যা' এর উপর ভিত্তি করে। কলব্যাক কলামক্যালব্যাক ফর্ম_স্টেট ভেরিয়েবলটিকে 10 এ পরিবর্তন করে এবং 'কলামনাম' ফর্ম ক্ষেত্রটি পরিবর্তিত হলে তা বহিস্কার করা হয়। তবে form form_state-> setRebuild () সত্ত্বেও ফর্মটি নতুন সংখ্যক ক্ষেত্রের সাথে পুনর্নির্মাণ করা হয়নি; বলা হয়. এজ্যাক্স কলের পরে ফর্মটি পুনর্নির্মাণের কোনও উপায় আছে কি?
দ্রষ্টব্য: আমি ইতিমধ্যে প্রকৃত এজাক্স কলটির ভিতরে ফর্মের আইটেমগুলি প্রতিস্থাপন বা সংযোজন করার মতো কৌশলগুলি চেষ্টা করেছি তবে যখন এটি ঘটে তখন প্রতিস্থাপিত ক্ষেত্রগুলিতে কোনও ইনপুট $ form_state এ পাস হবে না।
আপডেট: 4 কে 4 এর সমাধান করার চেষ্টা করার পরে আমি একটি ত্রুটি পেয়েছি
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'],
]
তবে আমি একই ত্রুটি পেয়েছি। কৌতূহলজনকভাবে, যখন আমি কলব্যাক পরিবর্তন করি কেবলমাত্র $ ফর্মের পরিবর্তে পুরো $ ফর্মটি ['কলাম'] ফিরিয়ে আনার সময় এটি ফর্মটি পুনরাবৃত্তি করে (ফর্মটির একটি অনুলিপি বর্তমান ফর্মের নীচে প্রদর্শিত হয়) এবং এখনও কলামগুলির সঠিক সংখ্যা ছাড়াই।