Pergunta

No painel de administração, quando os seleciona administração uma ação ele irá carregar dados de uma API e guardá-lo para o DB. Poderia levar de 2 segundos a 3 minutos, dependendo do que ele está importando.

Como posso fazer em Symfony para criar como um fio, de modo que o administrador não está à espera de acabamento. E quando é tell acabado-lo para verificar o resultado?

são as tarefas a resposta para este problema?

Obrigado!

Foi útil?

Solução

symfony-específica não, mas você vai querer lançar algum processo em segundo plano.

Eu não estou familiarizado com ferramentas do symfony para scripts de linha de comando, mas eu acho que há coisas que você pode usar.

Em seguida, em seu controlador, você quer algo mais ou menos assim (supondo que você está em um host 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"
}

O processo de fundo (em /path/to/your/background/script.php) deve tomar a jobId passou, pegar o registro de trabalho e utilize todos os insumos armazenados para executar o trabalho. Quando ele é feito agarrando dados e enchê-lo no banco de dados, deve-se definir um endtime na tabela (que marca a tarefa como concluída) e, em seguida, fazer o que você quer fazer para notificar o usuário (envie um e-mail ou inserir algum tipo de linha em uma tabela mensagens, etc)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top