Drupal 8で#element_validateと#value_callbackを使用する方法


9

私は公式のフォーム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_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()(標準のスティックラーである場合は、実際に名前を付ける必要がありますfileGenericSettingsMaxFilesizepublic

このドキュメントは現在進行中です。変更通知はこちらです。


4
フォームオブジェクトのメソッドの場合は、array( ':: file_generic_settings_max_filesize')を使用できます。drupal.org
node /

変更通知の例に詳細を追加し、それに関連するドキュメントの問題を追加しました。
コーラン2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.