2024_Hello_World
@2024_Hello_World

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

[Laravel]ディスパッチできない

Q&A

Closed

解決したいこと

Laravelでジョブを作成したが、ディスパッチができません。
コードに間違いがあれば教えてください。

ディスパッチを行いnameに[+MYJOB]というテキストを追加し、すでに[+MYJOB]が追加されている場合は、それを削除します。

発生している問題・エラー

nameに[+MYJOB]が追加されない。

スクリーンショット 2024-04-04 135638.png
↓このように表示させたいです。

スクリーンショット 2024-04-04 135709.png

該当するソースコード

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

No Answers yet.

Your answer might help someone💌