Як використовувати #element_validate та #value_callback в Drupal 8


9

Я дотримувався офіційної документації API API, але цей код не працює для мене на 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.');
  }

Я намагаюся замінити form_error () на $ form_state-> setErrorByName (), але ця ж проблема, файл завантажений і перевірка не викликається.

У вас є рішення, будь ласка? Документація #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

Я просто додав більше деталей до прикладу у повідомленні про зміни та додав питання щодо документації, пов’язаного з цим.
колан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.