在执行事件时调用 Laravel 中未定义的方法

Nie*_*nna 8 laravel laravel-8

当我发帖并点击我的活动时,我收到此错误

调用未定义的方法 App\Events\UpdateProductCount::__invoke()

这是我的代码

    public function create()
    {
        $product = Product::create([
            'name' => request('name'),
            'description' => request('description'),
        ]);

        dispatch(new UpdateProductCount($product));
    }
Run Code Online (Sandbox Code Playgroud)

这就是我在 UpdateProductCount 事件中的内容

    <?php

    namespace App\Events;

    use App\Models\Product;
    use Illuminate\Broadcasting\Channel;
    use Illuminate\Broadcasting\InteractsWithSockets;
    use Illuminate\Broadcasting\PresenceChannel;
    use Illuminate\Broadcasting\PrivateChannel;
    use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
    use Illuminate\Foundation\Events\Dispatchable;
    use Illuminate\Queue\SerializesModels;

    class UpdateProductCount
    {
        use Dispatchable, InteractsWithSockets, SerializesModels;

        public Product $product;

        public function __construct(Product $product)
        {
            $this->product = $product;
        }

        public function broadcastOn()
        {
            return new PrivateChannel('product-count-update'.$this->product);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这就是我的 UpdateProductCountListener 中的内容

    <?php

    namespace App\Listeners;

    use App\Events\UpdateProductCount;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Queue\InteractsWithQueue;

    class UpdateProductCountListener
    {

        public function __construct()
        {
            
        }

        public function handle(UpdateProductCount $event)
        {
            dd($event);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Nie*_*nna 17

在查看我的堆栈跟踪(如@miken32)后表明它正在抱怨这一行

dispatch(new UpdateProductCount($product));
Run Code Online (Sandbox Code Playgroud)

所以我尝试更改dispatchevent

// dispatch(new UpdateProductCount($product)); 
event(new UpdateProductCount($product)); 
Run Code Online (Sandbox Code Playgroud)

这奏效了。


Sup*_*nda 11

我的问题是导入了错误的Dispatchable特征。

错误的:

use Illuminate\Foundation\Bus\Dispatchable;
Run Code Online (Sandbox Code Playgroud)

正确的:

use Illuminate\Foundation\Events\Dispatchable;
Run Code Online (Sandbox Code Playgroud)