Как передать результаты батча в форму?

Главные вкладки

Аватар пользователя Whiteless Whiteless 12 ноября 2022 в 15:58

Доброго дня!

Drupal 9. php.

Есть батч

$batch = new BatchBuilder();

который много раз запрашивает разные данные через api у стороннего сервера

$batch->addOperation([$this, 'request_data1'], [$params]);
...
$batch->addOperation([$this, 'request_datan'], [$params]);

Этапы батча получают параметры и складывают их в результаты

public function request_data1($op, &$context)
{
$context['results']['data1'] = API::GET('some params');
}

по завершениии я все эти данные успешно вижу

public function batch_complete($success, $results, $operations)
{
dpm($results);
}

а теперь вопрос.
Как с этими данными сгенерировать и отобразить форму?
Данных довольно много. Через GET или POST не передать.

Комментарии

Аватар пользователя OldWarrior OldWarrior 13 ноября 2022 в 23:52

Сессии.

В батче:

<?php
...
public function 
batch_complete($success$results$operations) {
  
$session = \Drupal::request()->getSession();
  
$session->set('batch_results'$results);
}
...
?>

В форме (контейнер форм в D9 обычно уже содержит экземпляр Request):

<?php
...
public function 
buildForm(array $formFormStateInterface $form_state) {
  
$session $this->getRequest()->getSession();
  if (
$session->get('batch_results')) {
    
$results $session->get('batch_results');
    
// Заполняем из $results  значения полей формы здесь...
    // ...
    
\Drupal::messenger()->addMessage('Найдены данные из батча');
    
    
// Очищаем сессию. Можно сделать это и позже, на сабмите.
    
$session->remove('batch_results');
  }
  else{
    \
Drupal::messenger()->addMessage('Не найдены данные из батча');
  }
}
...
?>