0

管理パネルで、管理者がアクションを選択すると、API からデータがロードされ、DB に保存されます。インポートする内容によっては、2 秒から 3 分かかる場合があります。

管理者が終了するのを待たないように、Symfony でスレッドのように作成するにはどうすればよいですか。そして、それが終わったら、彼に結果を確認するように言いますか?

タスクはこの問題の答えですか?

ありがとう!

4

1 に答える 1

2

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内)は、渡されたjobIdを取得し、ジョブレコードを取得し、保存されている入力を使用してジョブを実行する必要があります。データの取得とデータベースへの詰め込みが完了したら、テーブルに終了時刻を設定し(ジョブを完了としてマークします)、ユーザーに通知するために必要なことをすべて実行します(電子メールを送信するか、いくつかを挿入します)。メッセージテーブルなどへの行の種類)

于 2009-11-01T20:19:09.750 に答える