【Laravel中級者】11-派遣-ジョブ

WBOY
リリース: 2016-06-20 12:29:28
オリジナル
1256 人が閲覧しました

はじめに

イベントとリスナーについては以前に学習しましたが、今回はジョブについて学習します。

ジョブの作成

コマンドライン phpArtisan make:job CompileReports を実行して、Job クラスの構造は単純です。一般的に、Job クラスの構造は単純です。このタスクのハンドル メソッドを呼び出すときの具体的なコードは次のとおりです:

class CompileReports extends Job implements SelfHandling{   /**   * Create a new job instance.   *   * @return void   */  public function __construct()  {    //  }   /**   * Execute the job.   *   * @return void   */  public function handle()  {    //  }} 
ログイン後にコピー

php 職人のヘルプ make:job を介して関連するパラメーターを確認でき、php 職人の make:job CompileReports を実行します。 --queued を実行し、結果を前のクラスと比較します。違いは、ShouldQueue インターフェイスを実装していることです。つまり、キュー順に実行できることを意味します。

ルートとコントローラーを追加します

デフォルトルートを Routes.php に追加します:

Route::get('reports', 'ReportsController@index'); 
ログイン後にコピー

コマンドラインを実行します php 職人 make:controller ReportsController --plain、ReportsController コントローラーを作成し、テスト メソッドを追加します。

class ReportsController extends Controller{    //  public function index()  {    $job = new CompileReports();    $this->dispatch($job);    return 'Done';  } } 
ログイン後にコピー

ReportsController コントローラーのコントローラー親クラスで、デフォルトで定義されている DispatchesJobs を使用します。 dispatch( $job) メソッド。タスクをスケジュールするために使用されます。現時点で、ページへのアクセスの影響は次のとおりです。

ジョブのパラメーター処理

CompileReports.php コードを書き換え、ファイル内の $reportId パラメーターを受け入れます。コンストラクター:

class CompileReportsextends Jobimplements SelfHandling, ShouldQueue{   protected $reportId;  /**   * Create a new job instance.   *   * @return void   */  public function __construct($reportId)  {    //    $this->reportId = $reportId;  }   /**   * Execute the job.   *   * @return void   */  public function handle()  {    //    var_dump('Compiling the reports with the id '. $this->reportId .' within the Job class.');  }} 
ログイン後にコピー

ReportsController コントローラーはリクエスト内のパラメーターを受け入れ、処理のためにジョブに転送します:

class ReportsController extends Controller{  public function index(Request $request)  {    $job = new CompileReports($request->input('reportId'));    $this->dispatch($job);    return 'Done';  }} 
ログイン後にコピー

ページにアクセスした場合の影響は次のとおりです:

ジョブでの複数パラメーターの処理

ReportsController でdispatchFrom メソッドが呼び出されます:

class ReportsController extends Controller{    //  public function index(Request $request)  {    //$job = new CompileReports($request->input('reportId'));        // $this->dispatchFrom(CompileReports::class, $request);    $this->dispatchFrom('App\Jobs\CompileReports', $request);    return 'Done';  } } 
ログイン後にコピー

ディスパッチとdispatchFromは次のようにDispatchesJobsで定義されています:

trait DispatchesJobs{    /**     * Dispatch a job to its appropriate handler.     *     * @param  mixed  $job     * @return mixed     */    protected function dispatch($job)    {        return app('Illuminate\Contracts\Bus\Dispatcher')->dispatch($job);    }     /**     * Marshal a job and dispatch it to its appropriate handler.     *     * @param  mixed  $job     * @param  array  $array     * @return mixed     */    protected function dispatchFromArray($job, array $array)    {        return app('Illuminate\Contracts\Bus\Dispatcher')->dispatchFromArray($job, $array);    }     /**     * Marshal a job and dispatch it to its appropriate handler.     * 整理参数列表,传递给job     * @param  mixed  $job     * @param  \ArrayAccess  $source     * @param  array  $extras     * @return mixed     */    protected function dispatchFrom($job, ArrayAccess $source, $extras = [])    {        return app('Illuminate\Contracts\Bus\Dispatcher')->dispatchFrom($job, $source, $extras);    }} 
ログイン後にコピー

CompileReportsクラスの受信パラメータを書き換えます:

class CompileReportsextends Jobimplements SelfHandling, ShouldQueue{   protected $reportId;   protected $type;  /**   * Create a new job instance.   *   * @return void   */  public function __construct($reportId, $type)  {    //    $this->reportId = $reportId;    $this->type = $type;  }   /**   * Execute the job.   *   * @return void   */  public function handle()  {    //    var_dump('Compiling the '. $this->type .' reports with the id '. $this->reportId .' within the Job class.');  }} 
ログイン後にコピー

アクセス効果は次のとおりです:

ジョブに DispatchesJobs 参照を追加した後、ジョブのディスパッチを続行できます:

/*** Execute the job.** @return void*/public function handle(){    // var_dump('Compiling the '. $this->type .' reports with the id '. $this->reportId .' within the Job class.');    var_dump(sprintf('Compiling the %s report with the id %s within the Job class', $this->type, $this->reportId));    // 增加 DispatchesJobs 引用后,可继续分派 job    if(true)    {        $this->dispatch(new DoSomethingElse);    }} 
ログイン後にコピー

アクセス効果は次のとおりです:

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!