[Intermediate Laravel] 11-Dispatching-Jobs
简介
之前我们已经学习了 Events 和 Listeners ,这次我们来学习 Jobs。
Jobs的创建
运行命令行 php artisan make:job CompileReports 创建一个Job类,Job类的结构简单,一般来说只会包含一个让队列用来调用此任务的 handle 方法,具体代码如下:
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 artisan help make:job 观察相关参数,执行 php artisan make:job CompileReports --queued ,对比发现和之前类区别为多实现了 ShouldQueue 接口,这意味着可以按队列顺序执行。
增加路由和控制器
默认路由 routes.php 中增加:
Route::get('reports', 'ReportsController@index');
通过执行命令行 php artisan make:controller ReportsController --plain ,创建 ReportsController 控制器,增加测试方法:
class ReportsController extends Controller{ // public function index() { $job = new CompileReports(); $this->dispatch($job); return 'Done'; } }
ReportsController 控制器的 Controller 父类中,默认已经 use DispatchesJobs ,定义好了 dispatch($job) 方法,用来调度任务。这时我们访问页面效果如下图:
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 控制器中接受请求中参数,转发给Job处理:
class ReportsController extends Controller{ public function index(Request $request) { $job = new CompileReports($request->input('reportId')); $this->dispatch($job); return 'Done'; }}
访问页面效果如下:
Job中多参数处理
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'; } }
其中 DispatchesJobs 中定义了 dispatch 及 dispatchFrom,如下:
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.'); }}
访问效果如下图:
在 Job 中添加 DispatchesJobs 引用后,可继续分派Job:
/*** 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); }}
访问效果如下图:

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

PHP 로깅은 웹 애플리케이션을 모니터링하고 디버깅하고 중요한 이벤트, 오류 및 런타임 동작을 캡처하는 데 필수적입니다. 시스템 성능에 대한 귀중한 통찰력을 제공하고 문제를 식별하며 더 빠른 문제 해결을 지원합니다.

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

Alipay PHP ...
