[Laravel]ディスパッチできない
Q&A
Closed
解決したいこと
Laravelでジョブを作成したが、ディスパッチができません。
コードに間違いがあれば教えてください。
ディスパッチを行いnameに[+MYJOB]というテキストを追加し、すでに[+MYJOB]が追加されている場合は、それを削除します。
発生している問題・エラー
nameに[+MYJOB]が追加されない。
該当するソースコード
web.php
<?php
use App\Http\Controllers\HelloController;
use Illuminate\Support\Facades\Route;
Route::get('hello',[HelloController::class,'index']);
Route::get('/hello/{person}', [HelloController::class, 'index']);
HelloController.php
<?php
namespace App\Http\Controllers;
use App\Jobs\MyJob;
use App\Models\Person;
class HelloController extends Controller
{
public function index(Person $person = null)
{
if ($person != null)
{
MyJob::dispatch($person);
}
$msg = 'show people record.';
$result = Person::get();
$data = [
'input' => '',
'msg' => $msg,
'data' => $result,
];
return view('hello.index', $data);
}
}
MyJob.php
<?php
namespace App\Jobs;
use App\Models\Person;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class MyJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*/
protected $person;
public function __construct(Person $person)
{
$this->person = $person;
}
/**
* Execute the job.
*/
public function handle(): void
{
$sufix = '[+MYJOB]';
if (strpos($this->person->name, $sufix))
{
$this->person->name = str_replace( $sufix, '', $this->person->name);
}
else
{
$this->person->name .= $sufix;
}
$this->person->save();
}
}
MyJobProvider.php
<?php
namespace App\Providers;
use App\Jobs\MyJob;
use Illuminate\Support\ServiceProvider;
class MyJobProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
$this->app->bindMethod(MyJob::class.'handle', function($job, $app)
{
return $job->handle();
});
}
/**
* Bootstrap services.
*/
public function boot(): void
{
//
}
}
Person.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Person extends Model
{
public function getAllDataAttribute()
{
return $this->name . '(' . $this->age . ')' . '[' . $this->mail . ']';
}
}
index.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<title>Index</title>
</head>
<body>
<h1>Hello/Index</h1>
<p>{{$msg}}</p>
<div>
<form action="hello" method="post">
@csrf
<input type="text" id="find" name="find" value="{{$input}}">
<input type="submit">
</form>
</div>
<hr>
<table border = "1">
@foreach ($data as $item)
<tr>
<th>{{$item->id}}</th>
<td>{{$item->all_data}}</td>
</tr>
@endforeach
</table>
<hr>
</body>
</html>
0