Посмотрим как получить непосредственный доступ к файлу без загрузки файла в хранилище, при его загрузке в поле типа «file» Form API.
Много гайдов посвящено тому как использовать поле managed_file, а для unmanaged случая считается, что разработчик быстро разберется в документации к Symfony.
Разбираться с разными элементами форм Drupal API можно, начав отсюда — https://api.drupal.org/api/drupal/elements/10
Допустим, пользователь должен загрузить JSON файл:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
class MyForm extends FormBase { public function getFormId() { return 'my_form'; } public function buildForm(array $form, FormStateInterface $form_state) { $form['file'] = [ '#type' => 'file', '#title' => $this->t('Import file'), '#attributes' => [ "accept" => ".json" ], ]; $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Submit'), ]; return $form; } public function submitForm(array &$form, FormStateInterface $form_state) { $filefield_name = 'file'; // получим POST файлы $all_files = \Drupal::request()->files; // и выберем информацию по имени поля $file = $all_files->get('files')[$filefield_name]; // получим объект типа // \Symfony\Component\HttpFoundation\File\UploadedFile // все доступные методы смотрите в доках Symfony dpm($file->getClientMimeType()); dpm($file->getFileName()); dpm($file->getRealPath()); // реальный путь - это как раз то самый временный файл // который был создан PHP при загрузке данных формы // получим данные, декодируем json, выводим через devel dpm(json_decode(file_get_contents($file->getRealPath()))); } } |