Frage

In dem Admin-Panel, wenn der Administrator eine Aktion auswählt, wird es Daten aus einer API laden und an die DB speichern. Es könnte von 2 Sekunden bis 3 Minuten dauern, je nachdem, was er zu importieren.

Wie kann ich in Symfony wie ein roten Faden zu schaffen, so dass der Server-Betreiber wartet nicht zu beenden. Und wenn es fertig ist ihm sagen, das Ergebnis zu überprüfen?

sind die Aufgaben die Antwort für dieses Problem?

Danke!

War es hilfreich?

Lösung

Nicht symfony-spezifisch, aber Sie werden einige Hintergrundprozess beginnen wollen.

Ich bin mit Symfony Werkzeuge für die Kommandozeilen-Skripts nicht vertraut, aber ich denke, es gibt Sachen, die Sie verwenden können.

Dann in Ihrem Controller, wollen Sie etwas grob wie (vorausgesetzt, Sie sind auf einer Unixy Host):

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"
}

Ihr Hintergrundprozess (in /path/to/your/background/script.php) sollte das übergebene jobId nehmen, den Auftragsdatensatz greifen, und verwenden Sie alle gespeicherten Eingaben den Job auszuführen. Wenn es Daten getan greifen und sie in die Datenbank zu stopfen, sollte es eine endtime in der Tabelle tun gesetzt (die den Job als abgeschlossen markiert), und dann tun, was Sie die Benutzer benachrichtigen tun möchten (E-Mail, oder einige einfügen Art der Zeile in eine Nachrichten-Tabelle, usw.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top