Drupal 8에서 #element_validate 및 #value_callback 사용 방법


9

공식 Form API Documentation을 따르지만 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_state-> setErrorByName ()으로 form_error ()를 원격으로 바꾸려고했지만 동일한 문제가 발생했습니다. 파일이 업로드되고 유효성 검사가 호출되지 않습니다.

해결책이 있습니까? #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()할 표준 을 표시해야합니다 (표준에 대한 stickler 인 경우 실제로 이름을 지정해야 함 fileGenericSettingsMaxFilesize) public.

이에 대한 문서가 진행 중이며 변경 공지가 있습니다 .


4
양식 객체의 메소드 인 경우 array ( ':: file_generic_settings_max_filesize')를 사용할 수 있습니다. drupal.org/node/2325875
Berdir

변경 알림의 예제에 더 자세한 내용을 추가하고 관련 문서 문제를 추가했습니다.
colan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.