Cara menggunakan #element_validate dan #value_callback di Drupal 8

9

Saya telah mengikuti Dokumentasi API Formulir resmi, tetapi kode ini tidak berfungsi untuk saya di Drupal 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.');
  }

Saya telah mencoba remplace form_error () dengan $ form_state-> setErrorByName () tetapi masalah yang sama, file diunggah dan validasinya tidak dipanggil.

Sudahkah Anda solusinya? Dokumentasi #element_validate sudah usang?

Tujuan saya: Unggah banyak gambar, gunakan validasi khusus, dan masukkan semua gambar mini di dalam kolom <div class="preview"></div>dengan nama untuk setiap gambar.

Contoh: masukkan deskripsi gambar di sini (Setelah mengunggah, tampilkan thumbnail dan bidang judul untuk memberi nama semua gambar)

Selain itu, setelah mengunggah, untuk menampilkan Gambar Kecil dan bidang lainnya (judul dan deskripsi) untuk setiap gambar, saya perlu menggunakan #value_callback, #process, #attached (mengelola bidang / tampilan dengan js setelah mengunggah) atau opsi lain tolong?

Terima kasih.

Axel Briche
sumber

Jawaban:

9

Untuk menggunakan metode instance untuk #element_validate/ #value_callbacketc Anda perlu dipanggil . misalnya

$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'),
  ),
);

Anda harus menandai file_generic_settings_max_filesize()(yang jika Anda menjadi stickler untuk standar harus benar-benar dinamai fileGenericSettingsMaxFilesize) publicuntuk mengakomodasi, karena kelas Anda tidak akan memanggil metode.

Dokumentasi untuk ini sedang berlangsung , pemberitahuan perubahan ada di sini .

Clive
sumber
4
Jika ini adalah metode pada objek formulir, maka array (':: file_generic_settings_max_filesize') dapat digunakan, lihat drupal.org/node/2325875
Berdir
Saya baru saja menambahkan rincian lebih lanjut ke contoh dalam pemberitahuan perubahan, dan menambahkan masalah dokumentasi yang terkait dengannya.
colan