Длинный скрипт в админке, задача в Symfony?

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

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

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

Благодарность!


person fesja    schedule 01.11.2009    source источник


Ответы (1)


Не специфично для 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) должен принять переданный jobId, получить запись задания и использовать любые сохраненные входные данные для запуска задания. По завершении сбора данных и помещения их в базу данных необходимо установить конечное время в таблице (что помечает задание как выполненное), а затем сделать все, что вы хотите сделать, чтобы уведомить пользователя (отправить электронное письмо или вставить тип строки в таблице сообщений и т. д.)

person timdev    schedule 01.11.2009