Cách sử dụng #element_validate và #value_callback trong Drupal 8


9

Tôi đã theo dõi Tài liệu API mẫu chính thức, nhưng mã này không hoạt động với tôi trên 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.');
  }

Tôi đã cố gắng đặt lại form_error () bằng $ form_state-> setErrorByName () nhưng cùng một vấn đề, tệp được tải lên và xác thực không được gọi.

Bạn có một giải pháp xin vui lòng? Tài liệu của #element_validate đã lỗi thời?

Mục tiêu của tôi: Tải lên rất nhiều hình ảnh, sử dụng xác thực tùy chỉnh và chèn tất cả hình thu nhỏ của hình ảnh bên trong <div class="preview"></div>với một trường để đặt tên cho mỗi hình ảnh.

Ví dụ: nhập mô tả hình ảnh ở đây (Sau khi tải lên, hiển thị hình thu nhỏ và trường tiêu đề cho tên của tất cả các hình ảnh)

Khác, sau khi tải lên, để hiển thị Hình thu nhỏ và trường khác (tiêu đề và mô tả) cho mỗi hình ảnh, tôi cần sử dụng #value_callback, # process, #attached (quản lý trường / hiển thị với js sau khi tải lên) hoặc một tùy chọn khác?

Cảm ơn.

Câu trả lời:


9

Để sử dụng một phương thức ví dụ cho #element_validate/ #value_callbacketc bạn cần có thể gọi được . ví dụ

$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ạn sẽ cần phải đánh dấu file_generic_settings_max_filesize()(mà nếu bạn là người gắn bó với các tiêu chuẩn nên thực sự được đặt tên fileGenericSettingsMaxFilesize) publicđể phù hợp, vì lớp của bạn sẽ không được gọi phương thức.

Tài liệu cho việc này đang diễn ra , thông báo thay đổi ở đây .


4
Nếu đó là một phương thức trên đối tượng biểu mẫu, thì có thể sử dụng mảng (':: file_generic_sinstall_max_filesize'), xem drupal.org/node/2325875
Berdir 18/12/14

Tôi chỉ thêm chi tiết vào ví dụ trong thông báo thay đổi và thêm vấn đề tài liệu liên quan đến nó.
colan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.