Для отправки Ajax формы с файлом в Drupal 8/9 необходимо выполнить следующие шаги:
1. Создать форму:
public function buildForm(array $form, FormStateInterface $form_state) { $form['file'] = [ '#type' => 'managed_file', '#title' => $this->t('Upload File'), '#upload_location' => 'public://', '#upload_validators' => [ 'file_validate_extensions' => ['jpg jpeg png gif'], ], ]; $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Submit'), '#ajax' => [ 'callback' => '::submitFormAjax', ], ]; return $form; }
2. Обработать отправку формы с использованием Ajax:
public function submitForm(array &$form, FormStateInterface $form_state) { // Обработка данных формы и загруженного файла } public function submitFormAjax(array &$form, FormStateInterface $form_state) { $response = new AjaxResponse(); // Обработка данных формы и загруженного файла return $response; }
3. Настроить маршрут для обработки формы:
mymodule.form_submit: path: '/my-form-submit' defaults: _form: 'DrupalmymoduleFormMyForm' _title: 'My Form Submit' requirements: _permission: 'access content'
4. На клиентской стороне использовать JavaScript для отправки данных формы с файлом через Ajax:
(function ($) { $('#my-form-id').submit(function (e) { e.preventDefault(); var formData = new FormData($(this)[0]); $.ajax({ url: '/my-form-submit', type: 'POST', data: formData, processData: false, contentType: false, success: function (data) { // Обработка успешного ответа }, error: function () { // Обработка ошибки } }); }); })(jQuery);
Следуя этим шагам, вы сможете успешно отправить Ajax форму с файлом в Drupal 8/9.