2009-11-01 6 views
0

Dans le panneau d'administration, lorsque l'administrateur sélectionne une action, il charge les données d'une API et les enregistre dans la base de données. Cela peut prendre de 2 secondes à 3 minutes, en fonction de ce qu'il importe.Script long dans admin, tâche dans Symfony?

Comment puis-je faire dans Symfony pour créer comme un thread, de sorte que l'administrateur n'attend pas pour terminer. Et quand c'est fini, dites-lui de vérifier le résultat?

Les tâches sont-elles la réponse à ce problème?

merci!

Répondre

2

Pas spécifique à symfony, mais vous voulez démarrer un processus d'arrière-plan. Je ne connais pas l'outil de symfony pour les scripts de ligne de commande, mais je pense qu'il y a des choses que vous pouvez utiliser.

Ensuite, dans votre contrôleur, vous voulez quelque chose à peu près comme (en supposant que vous êtes sur un hôte 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" 
} 

Votre processus d'arrière-plan (en /path/to/your/background/script.php) devrait prendre le jobId passé, saisir l'enregistrement du travail et utiliser les entrées stockées pour exécuter le travail. Quand il est fait en saisissant des données et en les insérant dans la base de données, il doit définir une heure de fin dans la table (qui marque le travail comme terminé), puis faire tout ce que vous voulez pour informer l'utilisateur type de ligne dans une table de messages, etc)

+0

merci, j'ai vu que je peux le faire avec pakeApp – fesja

Questions connexes