如何在Drupal 8中使用#element_validate和#value_callback


9

我遵循了官方的Form 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显示)或其他选项,请吗?

谢谢。

Answers:


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/2325875
Berdir 2014年

我只是在变更通知中的示例中添加了更多详细信息,并添加了与之相关的文档问题。
科兰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.