我正在尝试验证上传的文件确实具有.csv
扩展名。但是,此代码无效:
function upload_validate($form, &$form_state) {
// code that does work ...
else {
$file = file_save_upload('upload');
$errors = file_validate_extensions($file, 'csv');
if (! empty($errors)) {
form_set_error('', $errors[0]);
}
else {
$_SESSION[FILE_KEY] = serialize($file);
}
}
}
我做错了什么?
答案 0 :(得分:0)
<wrong>
我认为您的问题出在form_set_error()上。这是实际的功能(带注释):
<?php
function form_set_error($name = NULL, $message = '', $reset = FALSE) {
static $form = array();
if ($reset) {
$form = array();
}
// here is where setting $name to '' is a problem
if (isset($name) && !isset($form[$name])) {
$form[$name] = $message;
if ($message) {
drupal_set_message($message, 'error');
}
}
return $form;
}
?>
我认为问题是您将空字符串传递给$name
,因此form_set_error
看到该名称已设置但是不能有一个空字符串的数组键。我会尝试这样调用函数:
form_set_error(, $errors[0]);
</wrong>
(当我第一次写这篇文章时,在我添加到代码中的注释后,我没有读到该行isset()
的'!'inf前面。我会尝试传递一个字符串这不是$form
数组的任何部分,看看会发生什么,但可能会尝试下面的答案)
除此之外,通过查看API Documentation for file_validate_extensions()看起来您编写的代码应该可行。您是否尝试使用类似drupal_set_message()之类的内容来检查if块的哪一部分在您认为应该是的时候开始运行。可能是你的if逻辑有问题。