尽管我记下这个tutorial,但我的drupal 8产生了“可恢复的致命错误”
有Drupal日志的消息:“可恢复的致命错误:传递给file_move()的参数1必须实现接口Drupal \ file \ FileInterface,给定数组,调用..”
这是我的代码:
public function validateForm(array &$form, FormStateInterface $form_state) {
$file = file_save_upload('file', array(
// Validates file is really an image.
'file_validate_is_image' => array(),
// Validate extensions.
'file_validate_extensions' => array('png gif jpg jpeg'),
));
// If the file passed validation:
if ($file) {
// Move the file into the Drupal file system.
if ($file = file_move($file, 'public://')) {
// Save the file for use in the submit handler.
$form_state['storage']['file'] = $file;
}
else {a
form_set_error('file', t("Impossible d'enregistrer correctement le fichier."));
}
}
else {
form_set_error('file', t("Aucun fichier n'a été téléchargé."));
}
}
这是一个“正确”的问题吗? 这是上传文件的基本代码。
我添加了所有依赖项。还有更多..
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Database\Database;
use Drupal\eshpubmanager\Mutuals\ESHPubManagerMutuals;
use Drupal\eshpubmanager\Calendar\ESHPubManagerCalendar;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Routing;
use Drupal\Core\Url;
use Drupal\file\FileInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\State\StateInterface;
use Drupal\file\Entity\File;
use Drupal\stream_wrapper_example\StreamWrapper\SessionWrapper;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
有人有想法吗?
答案 0 :(得分:1)
根据文档,如果上传了多个文件,request.header.type = (unsigned)(j[0]-65) & 0xf;
将返回一个数组。在错误消息中,它表示file_save_upload
已传递一个数组,因此您可能正在上传多个文件,或者您的文件输入元素可能设置了file_move
属性。
在表单构建中确认。如果您想要上传一个文件,并且有multiple
标志将其删除。如果您的目标是上传多个文件,则必须循环浏览multiple
返回的值并对每个文件执行file_save_upload
。