Форма с отправкой файла в админке

Опубликовано 2023.02.17

Создайте новый модуль в вашей установке Drupal. Вы можете назвать его как угодно.

Создайте новый роут для своей страницы администрирования, определив его в файле mymodule.routing.yml. Например:

  1. mymodule.admin_form:
  2. path: '/admin/config/mymodule/form'
  3. defaults:
  4. _form: '\Drupal\mymodule\Form\AdminForm'
  5. _title: 'MyModule Admin Form'
  6. requirements:
  7. _permission: 'administer site configuration'

Этот роут указывает, что форма администрирования будет доступна по урлу /admin/config/mymodule/form и что она будет использовать класс формы AdminForm, определенный в вашем модуле.

Создайте новый класс формы в своем модуле, который будет обрабатывать форму загрузки файла. Например:

  1. namespace Drupal\mymodule\Form;
  2.  
  3. use Drupal\Core\Form\FormBase;
  4. use Drupal\Core\Form\FormStateInterface;
  5.  
  6. class AdminForm extends FormBase {
  7.  
  8. public function getFormId() {
  9. return 'mymodule_admin_form';
  10. }
  11.  
  12. public function buildForm(array $form, FormStateInterface $form_state) {
  13. $form['file'] = [
  14. '#type' => 'managed_file',
  15. '#title' => $this->t('Upload file'),
  16. '#description' => $this->t('Upload a file to be processed.'),
  17. '#upload_location' => 'public://mymodule/files',
  18. ];
  19.  
  20. $form['submit'] = [
  21. '#type' => 'submit',
  22. '#value' => $this->t('Save'),
  23. ];
  24.  
  25. return $form;
  26. }
  27.  
  28. public function submitForm(array &$form, FormStateInterface $form_state) {
  29. $file = $form_state->getValue('file');
  30. // Process the uploaded file here.
  31. }
  32. }

Этот класс формы определяет элемент формы управляемого файла, который позволит пользователям загружать файл для обработки. Метод submitForm() будет вызываться при отправке формы, и вы сможете там обработать загруженный файл.

Проверьте свою новую страницу, перейдя по /admin/config/mymodule/form . Вы должны увидеть форму загрузки файла и иметь возможность загрузить файл и отправить форму.

Вот и все! Теперь у вас есть административная страница Drupal 9 с формой загрузки файлов.