Come usare #element_validate e #value_callback in Drupal 8


9

Ho seguito la documentazione ufficiale API Form, ma questo codice non funziona per me su 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.');
  }

Sto cercando di sostituire form_error () con $ form_state-> setErrorByName () ma lo stesso problema, il file viene caricato e la convalida non viene chiamata.

Hai una soluzione per favore? La documentazione di #element_validate è obsoleta?

Il mio obiettivo: caricare molte immagini, utilizzare una convalida personalizzata e inserire tutte le miniature delle immagini all'interno <div class="preview"></div>di un campo con un nome per ogni immagine.

Esempio: inserisci qui la descrizione dell'immagine (dopo il caricamento, visualizza le miniature e il campo del titolo per nominare tutte le immagini)

Altrimenti, dopo il caricamento, per visualizzare le miniature e altri campi (titolo e descrizione) per ogni immagine, devo usare #value_callback, #process, #attached (gestisci il campo / display con js dopo il caricamento) o un'altra opzione per favore?

Grazie.

Risposte:


9

Per usare un metodo di istanza per #element_validate/ #value_callbacketc è necessario un callable . per esempio

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

Dovrai contrassegnare file_generic_settings_max_filesize()(che se fossi un pignolo per gli standard dovrebbe davvero essere nominato fileGenericSettingsMaxFilesize) come publicaccomodamento, poiché la tua classe non invocherà il metodo.

La documentazione per questo è in corso , l'avviso di modifica è qui .


4
Se si tratta di un metodo sull'oggetto modulo, è possibile utilizzare l'array (':: file_generic_settings_max_filesize'), vedere drupal.org/node/2325875
Berdir,

Ho appena aggiunto ulteriori dettagli all'esempio nell'avviso di modifica e ho aggiunto il problema di documentazione relativo ad esso.
colan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.