Вопрос

В панели администратора, когда администратор выбирает действие, он загружает данные из API и сохраняет их в БД.Это может занять от 2 секунд до 3 минут, в зависимости от того, что он импортирует.

Как мне сделать в Symfony создать как бы тред, чтобы админ не ждал завершения.А когда закончите, скажите ему, чтобы он проверил результат?

Являются ли задачи ответом на эту проблему?

Спасибо!

Это было полезно?

Решение

Не специфично для Symfony, но вам захочется запустить какой-нибудь фоновый процесс.

Я не знаком с инструментами Symfony для сценариев командной строки, но думаю, что вы можете ими воспользоваться.

Затем в вашем контроллере вам нужно что-то примерно такое (при условии, что вы находитесь на хосте unixy):

public function executeYourBackgroundTask(){

    // first, you might want to create some kind of entry in a table to keep track of jobs.
    // Imagine you've got a table to keep track of this stuff
    $job = new Backgroundjob();
    $job->user_id = $this->getUser()->getId();
    $job->starttime = time();
    $job->someArgument = $someArgument; //anything the job script needs for input.
    $job->save();


    $jobId = $job->getId();

    //start a job in the background.
    exec('php /path/to/your/background/script.php ' . $jobId .' &');

    //your view should just tell the user "Your job is being processed, you'll be notified when it is done"
}

Ваш фоновый процесс (в /path/to/your/background/script.php) должен принять переданный идентификатор задания, получить запись задания и использовать любые сохраненные входные данные для запуска задания.Когда он закончил сбор данных и загрузку их в базу данных, он должен установить время окончания в таблице (что отмечает задание как завершенное), а затем сделать все, что вы хотите, чтобы уведомить пользователя (отправить электронное письмо или вставить что-нибудь вид строки в таблице сообщений и т. д.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top