Quero fazer upload de um arquivo e tenho que usar o tipo de elemento do formulário como 'arquivo'. Na função de envio, não consigo obter dados adequados relacionados ao arquivo que estou carregando. SO alguém pode me ajudar a resolver isso. Encontre o código abaixo:
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);
}
Função de envio:
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();
}
}
Respostas:
Eu tive o mesmo problema com o
file
elemento do formulário. Resolvido isso usandomanaged_file
e fornecendo o local de upload e os validadores no elemento de formulário:Em seguida, envie:
fonte
Você pode acessar os dados dos arquivos enviados por meio do campo "file" usando o seguinte código (em D8.5 core / modules / config / src / Form / ConfigImportForm.php)
fonte
'#type' => 'file'
esse é o caminho para obter o arquivo.$file_name = $file->getClientOriginalName()
e, em seguida, salve o arquivo no local final viafile_unmanaged_copy($file_path, "PATH/$file_name");
.