app/Jobs/MyJob.php
フォルダーにジョブファイルを作成しました。コマンドラインを使用して可能であれば、1回だけ実行したいと思います。
何かのようなもの:
> php MyJob:run
このファイルまたはハンドルでメソッドを実行するには、どのコマンドを使用すればよいですか?
[〜#〜]更新[〜#〜]
私は作成しました mxl/laravel-job composerパッケージ提供Laravelコマンドラインからジョブをディスパッチするためのコマンド:
$ composer require mxl/laravel-job
$ php artisan job:dispatch YourJob # for jobs in app/Jobs directory (App\Jobs namespace)
$ php artisan job:dispatch '\Path\To\YourJob' # dispatch job by its full class name
$ php artisan job:dispatchNow YourJob # dispatch immediately
$ php artisan job:dispatch YourJob John 1990-01-01 # dispatch with parameters
パッケージは、ベースJob
クラスを使用してボイラープレートを削減する方法も提供し、コマンドラインパラメーターの解析を実装してPHPコードからのジョブを使用できるようにするFromParameters
インターフェースを備えていますとコマンドラインを同時に。
その機能についての詳細は パッケージGitHubページ を参照してください。
古い回答
走る
php artisan make:command DispatchJob
ジョブを実行する特別な職人コマンドを作成します。
作成済みを開くDispatchJob.php
ファイルを作成し、DispatchJob
クラスを次のように定義します。
class DispatchJob extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'job:dispatch {job}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Dispatch job';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$class = '\\App\\Jobs\\' . $this->argument('job');
dispatch(new $class());
}
}
次に、キューワーカーを開始します。
php artisan queue:work
その後、コマンドラインからジョブを実行できます:
php artisan job:dispatch YourJobNameHere
syncとは異なるQUEUE_DRIVER
を使用していて、以前に作成したキューをプロジェクトフォルダーからディスパッチしたい場合は、コマンド:
php artisan queue:work --queue=MyQueueName
これを確認してください リンクデータベースを構成するには、QUEUE_DRIVER
これが役立つことを願っています! cronからも実行できると思います。
オプションのジョブの場合
これを試して
class DispatchJob extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'job:dispatch {job} {parameter?}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Dispatch job';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$prefix = '\\App\Jobs\\';
$jobClassName = trim($this->argument('job'));
if(stripos($jobClassName,"/")){
$jobClassName = str_replace('/','\\',$jobClassName);
}
$class = '\\App\\Jobs\\' . $jobClassName;
if(!class_exists($class)){
$this->error("{$class} class Not exists");
}else {
if ($this->argument('parameter')) {
$job = new $class($this->argument('parameter'));
} else {
$job = new $class();
}
dispatch($job);
$this->info("Successfully Dispatch {$class} ");
}
}
}
今、あなたはターミナルでこのように試すことができます
1.フォルダなし
php artisan job:dispatch appJob
2.フォルダ付き
php artisan job:dispatch folderName/appJob
3.パラメーター付きフォルダー
php artisan job:dispatch folderName/appJob 12