Как программно прервать batch если в одной из функций выполнилось условие

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

Аватар пользователя engenes engenes 13 марта 2019 в 12:18

моя операция
<?php$operations[] = array('add_domain', array($domain));?>

мой батч

<?php
        batch_set
(array(
            
'operations' => $operations,
            
'finished' => 'add_devsite_finished',
            
'title' => 'Добавление домена',
            
'init_message' => 'Подготовка данных',
            
'progress_message' => 'Выполнено @current из @total.',
            
'error_message' => 'Произошла ошибка.',
        ));
?>
<?php
    
function add_domain($domain, &$context) {

        

$result['msg'] = 'ошибка'
        
$result['stasus'] = false;
        
        
//мое условие
        
if(!$result['stasus']){
             
//не знаю как прервать
         
}           

        

// Сообщение выводимое под прогресс-баром после окончания текущей операции
        
$context['message'] = 'Выполнение операции';
        
        
// Эта информация будет доступна в mymodule_batch_finished
        
$context['results']['operations'] = $result['msg'];    

        

sleep(2);
    }
?>

Лучший ответ

Аватар пользователя bumble bumble 13 марта 2019 в 14:46

Вернуть $context['finished'] = 1;

<?php
 
* @param $context['finished']
 *   
A float number between 0 and 1 informing the processing engine
 
*   of the completion level for the operation.
 *
 *   
(or no value explicitly setmeans the operation is finished
 
*   and the batch processing can continue to the next operation.
 *
 *   
Batch API resets this to 1 each time the operation callback is called.
?>

by https://www.drupal.org/docs/7/api/batch-api/overview

Комментарии

Аватар пользователя bumble bumble 13 марта 2019 в 14:46

Вернуть $context['finished'] = 1;

<?php
 
* @param $context['finished']
 *   
A float number between 0 and 1 informing the processing engine
 
*   of the completion level for the operation.
 *
 *   
(or no value explicitly setmeans the operation is finished
 
*   and the batch processing can continue to the next operation.
 *
 *   
Batch API resets this to 1 each time the operation callback is called.
?>

by https://www.drupal.org/docs/7/api/batch-api/overview

Аватар пользователя engenes engenes 13 марта 2019 в 16:41

это я пробовал, написал в своей функции
add_domain

$context['finished'] = 0;

batch остановился и висит, но как как прервать batch с ошибкой

Аватар пользователя engenes engenes 13 марта 2019 в 17:00

может быт есть пример рабочего решения или напишите как это должно выглядеть?

написал фот так, теперь bacth запускает эту функцию. но прогресс зависает на на стадии подготовки

никакого визуального завершения операции с ошибкой не происходит

вот содержание функции

пробовал менять последние три строчки местами эффекта нет.

<?php
    
function add_domain($domain, &$context) {
        
$context['results']['operations'][] = 'сообщение о статусе выполняемой функции';
        
        
$context['finished'] = 0;
        
trigger_error ('ошибка');
        
drupal_exit('ошибка');
        
        
//return send_data($query);
    
}

?>