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