Quiero cargar un archivo y tengo que usar el tipo de elemento de formulario como 'archivo'. En la función de envío, no puedo obtener ningún dato adecuado relacionado con el archivo que estoy cargando. Entonces, ¿alguien puede ayudarme a resolver esto? Por favor encuentre el siguiente código:
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);
}
Función de envío:
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();
}
}
Respuestas:
Tuve el mismo problema con el
file
elemento de formulario. Resolvió esto usandomanaged_file
y proporcionando la ubicación de carga y los validadores en el elemento de formulario:Luego en enviar:
fuente
Puede acceder a los datos de archivos cargados a través del campo "archivo" utilizando el siguiente código (desde D8.5 core / modules / config / src / Form / ConfigImportForm.php)
fuente
'#type' => 'file'
esta es la forma de obtener el archivo.$file_name = $file->getClientOriginalName()
, y luego guarde el archivo en la ubicación final a través defile_unmanaged_copy($file_path, "PATH/$file_name");
.