Длинный скрипт в админке, задача в Symfony? - PullRequest
0 голосов
/ 01 ноября 2009

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

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

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

спасибо!

1 Ответ

2 голосов
/ 01 ноября 2009

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

...