質問

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

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

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

ありがとう!

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top