Jak korzystać z #element_validate i #value_callback w Drupal 8

9

Postępowałem zgodnie z oficjalną dokumentacją interfejsu API formularza, ale ten kod nie działa dla mnie na 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.');
  }

Próbuję zastąpić form_error () przez $ form_state-> setErrorByName (), ale ten sam problem, plik jest przesyłany i sprawdzanie poprawności nie jest wywoływane.

Czy masz jakieś rozwiązanie? Dokumentacja #element_validate jest nieaktualna?

Mój cel: Prześlij wiele obrazów, użyj niestandardowej weryfikacji i wstaw wszystkie miniatury obrazów w <div class="preview"></div>polu z nazwami każdego z nich.

Przykład: wprowadź opis zdjęcia tutaj (Po przesłaniu wyświetl miniatury i pole tytułu dla nazwy wszystkich zdjęć)

W przeciwnym razie, po przesłaniu, do wyświetlenia Miniatury i inne pola (tytuł i opis) dla każdego obrazu, muszę użyć #value_callback, #process, #attached (zarządzać polem / wyświetlaczem js po przesłaniu) lub inną opcją proszę?

Dzięki.

Axel Briche
źródło

Odpowiedzi:

9

Aby użyć metody instancji dla #element_validate/ #value_callbacketc, potrzebujesz wywołania . na przykład

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

Będziesz musiał oznaczyć file_generic_settings_max_filesize()(co byś był zwolennikiem standardów, naprawdę powinien zostać nazwany fileGenericSettingsMaxFilesize), publicaby się dostosować, ponieważ twoja klasa nie będzie wywoływać tej metody.

Dokumentacja tego jest w toku , zawiadomienie o zmianie jest tutaj .

Clive
źródło
4
Jeśli jest to metoda obiektu formularza, można użyć tablicy (':: file_generic_settings_max_filesize'), patrz drupal.org/node/2325875
Berdir,
Właśnie dodałem więcej szczegółów do przykładu w zawiadomieniu o zmianie i dodałem problem z dokumentacją z tym związany.
colan,