drupal 8 – ¿Cómo puedo cargar archivos con el archivo de tipo de elemento de formulario?

Pregunta:

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? 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();
  }
}

Respuesta:

Tuve el mismo problema con el elemento de formulario de file . managed_file esto usando managed_file y proporcionando la ubicación de carga y los validadores en el elemento de formulario:

$form['test_CERTIFICATE'] = [
  '#type' => 'managed_file',
  '#title' => $this->t('Certificate'),
  '#upload_location' => 'private://certfiles',
  '#upload_validators' => [
    'file_validate_extensions' => ['pem'],
  ],
];

Luego en enviar:

use Drupal\file\Entity\File;

$form_file = $form_state->getValue('test_CERTIFICATE', 0);
if (isset($form_file[0]) && !empty($form_file[0])) {
  $file = File::load($form_file[0]);
  $file->setPermanent();
  $file->save();
}

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım