Je souhaite télécharger un fichier et je dois utiliser le type d'élément de formulaire comme «fichier». Dans la fonction de soumission, je ne peux pas obtenir de données appropriées concernant le fichier que je télécharge. Alors, quelqu'un peut-il m'aider à résoudre ce problème. Veuillez trouver le code ci-dessous:
public function buildForm(array $form, FormStateInterface $form_state) {
$form['test_CERTIFICATE'] = [
'#type' => 'file',
'#title' => $this->t('Certificate'),
'#description' => $this->t('Your Certificate (.pem file)').': '.\Drupal::state()->get('test_CERTIFICATE_NAME'),
];
return parent::buildForm($form, $form_state);
}
Soumettre la fonction:
public function submitForm(array &$form, FormStateInterface $form_state) {
parent::submitForm($form, $form_state);
$validators = array('file_validate_extensions' => array('pem'));
$files = file_save_upload('test_CERTIFICATE', $validators, 'public://certfiles', FILE_EXISTS_REPLACE);
$file = File::load($files[0]);
if($file) {
kint($files); exit;
//here control is not coming
$file->setPermanent();
$file->save();
}
}
Réponses:
J'ai eu le même problème avec l'
file
élément de formulaire. Résolu cela en utilisantmanaged_file
et en fournissant l'emplacement de téléchargement et les validateurs dans l'élément de formulaire:Puis en soumission:
la source
Vous pouvez accéder aux données des fichiers téléchargés via le champ "fichier" en utilisant le code suivant (à partir de D8.5 core / modules / config / src / Form / ConfigImportForm.php)
la source
'#type' => 'file'
c'est la façon d'obtenir le fichier.$file_name = $file->getClientOriginalName()
, puis enregistrer le fichier à l'emplacement final viafile_unmanaged_copy($file_path, "PATH/$file_name");
.