Drupal验证解决方案在使用文件上载和其他必需表单字段时
我有问题,而试图上传的形式,也有其他必填字段的图片。因此,如果我没有在必填字段中输入任何内容并上载图片,我将丢失表单验证期间上载的图片,因为图片不再存在。 我不能在form_州的任何地方打印它。如何将文件上载到包含其他必需表单元素的表单中?如果用户忘记在其他必填字段中输入信息,我不希望用户再次上传图片 有什么想法吗Drupal验证解决方案在使用文件上载和其他必需表单字段时,drupal,drupal-6,drupal-forms,drupal-form-validation,Drupal,Drupal 6,Drupal Forms,Drupal Form Validation,我有问题,而试图上传的形式,也有其他必填字段的图片。因此,如果我没有在必填字段中输入任何内容并上载图片,我将丢失表单验证期间上载的图片,因为图片不再存在。 我不能在form_州的任何地方打印它。如何将文件上载到包含其他必需表单元素的表单中?如果用户忘记在其他必填字段中输入信息,我不希望用户再次上传图片 有什么想法吗 function form() { $form['#attributes'] = array('enctype' => "multipart/form-data
function form() {
$form['#attributes'] = array('enctype' => "multipart/form-data");
//'upload' will be used in file_check_upload()
$form['upload'] = array('#type' => 'file');
$form['my_require_field'] = array(
'#type' => 'textfield',
'#title' => t('Enter code here'),
'#default_value' => 1,
'#size' => 20,
'#required' => TRUE
);
}
function form_validate() {
if(!file_check_upload('upload')) {
form_set_error('upload', 'File missing for upload.');
}
}
function form_submit() {
$file = file_check_upload('upload');
}
您应该使用正在使用Drupal 7的托管_文件类型id
$form['upload'] = array(
'#type' => 'managed_file',
'#title' => t('Upload Image'),
'#default_value' => '',
'#required' => TRUE,
'#description' => t("Upload Image description"),
);
在提交处理程序中,您可以编写以下内容:
// Load the file via file fid.
$file = file_load($form_state['values']['upload']);
// Change status to permanent and save.
$file->status = FILE_STATUS_PERMANENT;
file_save($file);
希望这会有帮助 对于Drupal 8
似乎不支持开箱即用的基本功能,例如使类型为file not managed_file required的字段成为所需的字段
需要在formValidate方法中实现此字段的自定义验证器。
在ConfigImportForm.php文件中可以找到此类功能的罕见示例
下面是一段代码,用于处理表单中的文件字段设置、所需的验证和提交
<?php
class YourForm extends FormBase {
public function buildForm(array $form, FormStateInterface $form_state) {
$form['myfile'] = [
'#title' => $this->t('Upload myfile'),
'#type' => 'file',
// DO NOT PROVILDE '#required' => TRUE or your form will always fail validation!
];
}
public function validateForm(array &$form, FormStateInterface $form_state) {
$all_files = $this->getRequest()->files->get('files', []);
if (!empty($all_files['myfile'])) {
$file_upload = $all_files['myfile'];
if ($file_upload->isValid()) {
$form_state->setValue('myfile', $file_upload->getRealPath());
return;
}
}
$form_state->setErrorByName('myfile', $this->t('The file could not be uploaded.'));
}
public function submitForm(array &$form, FormStateInterface $form_state) {
// Add validator for your file type etc.
$validators = ['file_validate_extensions' => ['csv']];
$file = file_save_upload('myfile', $validators, FALSE, 0);
if (!$file) {
return;
}
// The rest of submission processing.
// ...
}
}
从我正在使用Drupal 6:啊!然后你应该试试这个模块。其工作原理与D6中的托管_文件类型相同。