Question

Dans le panneau d'administration, lorsque l'administrateur sélectionne une action, il se chargera des données d'une API et enregistrez-la DB. Il pourrait prendre de 2 secondes à 3 minutes, en fonction de ce qu'il importe.

Comment puis-je faire pour créer Symfony comme un fil, de sorte que l'administrateur n'attend pas à la fin. Et quand il est fini de lui dire de vérifier le résultat?

sont les tâches de la réponse à ce problème?

merci!

Était-ce utile?

La solution

Non spécifique à symfony, mais vous aurez envie de lancer un processus d'arrière-plan.

Je ne suis pas familier avec l'outillage de symfony pour les scripts de ligne de commande, mais je pense qu'il ya 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 passé JOBID, saisir le dossier de l'emploi, et utiliser toutes les entrées enregistrées pour exécuter le travail. Quand il a fait saisir des données et la farce dans la base de données, il devrait faire mettre un endtime dans la table (qui marque le travail comme complet), puis faire ce que vous voulez faire pour informer l'utilisateur (envoyer un e-mail, ou insérez une type de ligne dans une table de messages, etc.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top