Drupal 8 में #element_validate और #value_callback का उपयोग कैसे करें


9

मैंने आधिकारिक फॉर्म एपीआई प्रलेखन का पालन किया है, लेकिन यह कोड मेरे लिए ड्रुपल 8 पर काम नहीं करता है:

  public function buildForm(array $form, FormStateInterface $form_state) {
    $form['upload'] = array(
      '#title' => t('Upload Images'),
      '#type' => 'managed_file',
      '#upload_location' => 'public://image_example_images/',
      '#element_validate' => array('file_generic_settings_max_filesize'),
    );
    return $form;
  }

  private function file_generic_settings_max_filesize($element, &$form_state) {
    form_error($element, 'This is an error.');
  }

मेरे पास $ form_state-> setErrorByName () द्वारा form_error () को हटाने की कोशिश की जा रही है, लेकिन एक ही समस्या है, फ़ाइल अपलोड की गई है और सत्यापन को नहीं बुलाया गया है।

क्या आपके पास कोई समाधान है? #Element_validate का प्रलेखन पुराना है?

मेरा उद्देश्य: बहुत सारी छवियां अपलोड करें, एक कस्टम सत्यापन का उपयोग करें और <div class="preview"></div>प्रत्येक छवियों के नाम के लिए फ़ील्ड के साथ सभी छवियों के थंबनेल डालें ।

उदाहरण: यहां छवि विवरण दर्ज करें (अपलोड होने के बाद, सभी छवियों के नाम के लिए थंबनेल और शीर्षक फ़ील्ड प्रदर्शित करें)

अपलोड के बाद, प्रत्येक छवि के लिए थंबनेल और अन्य फ़ील्ड (शीर्षक और विवरण) प्रदर्शित करने के लिए, मुझे #value_callback, #process, #attached (अपलोड के बाद js के साथ फ़ील्ड / प्रदर्शन का प्रबंधन) या किसी अन्य विकल्प का उपयोग करने की आवश्यकता है?

धन्यवाद।

जवाबों:


9

#element_validate/ #value_callbackEtc के लिए एक इंस्टेंस विधि का उपयोग करने के लिए आपको कॉल करने योग्य चाहिए । जैसे

$form['upload'] = array(
  '#title' => t('Upload Images'),
  '#type' => 'managed_file',
  '#upload_location' => 'public://image_example_images/',
  '#element_validate' => array(
    array($this, 'file_generic_settings_max_filesize'),
  ),
);

आपको समायोजित करने की आवश्यकता होगी file_generic_settings_max_filesize()(जो कि यदि आप मानकों के लिए एक स्टिकर के fileGenericSettingsMaxFilesizeरूप में वास्तव में नामित किया जाना चाहिए ) publicको समायोजित करने के लिए, क्योंकि आपकी कक्षा विधि को लागू नहीं करेगी।

इसके लिए दस्तावेज़ीकरण जारी है , परिवर्तन नोटिस यहाँ है


4
यदि यह फॉर्म ऑब्जेक्ट पर एक विधि है, तो सरणी (':: file_generic_settings_max_filesize') का उपयोग किया जा सकता है, drupal.org/node/2325875
Berdir

मैंने केवल परिवर्तन सूचना में उदाहरण के लिए और विवरण जोड़ा है, और इससे संबंधित प्रलेखन मुद्दा भी जोड़ा है।
3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.