首页 > 解决方案 > Drupal 7,hook_file_presave 显示错误信息并停止上传文件

问题描述

我是 drupal 7 的新手,我正在尝试创建 hook_file_presave / hook_file_validate / hook_field_validate 函数,用于检查在站点上传的 pdf 文件是否不受密码保护。

如果文件受密码保护,我可以使用 php 轻松检查。但是当我显示错误消息时,它只显示错误消息也上传文件。我想我没有使用正确的钩子。

function simpletest_file_presave($destination){
    // here is my logic

    drupal_set_message(t('file is encrypted >>>>>>>> '. $filename), 'error');
    return;
}

在这里你可以看到文件不应该被上传但它有删除按钮。

标签: drupaldrupal-7

解决方案


自从我接触 Drupal 已经有一段时间了,但我首先想到了hook_file_validate()

但是正如这里所解释的,您可以实现hook_form_FORM_ID_alter()以添加自己的文件上传验证器,然后返回要显示的错误数组。

重要提示:当您使用该t()功能翻译您的消息时,不要将文件名附加到您的字符串,因为这将创建多个翻译字符串,每个上传文件一个,因此永远不会翻译,因为它总是会有所不同。为避免这种情况,请使用占位符并将文件名作为字符串参数传递,如下所示:

$error_message = t(
  'The file "@filename" is encrypted! Please upload a PDF without password protection.',
  ['@filename' => $filename_without_path]
);

请参阅t() 和 format_string() 函数的 API 文档


推荐阅读