Когда я настраиваю трансляцию, я получаю такую ошибку:
Argument 1 passed to App\Events\MessagePosted::__construct() must be an instance of App\Events\Message, instance of App\Message given, called in /var/www/epg/app/Http/Controllers/MessageController.php on line 25 /var/www/epg/app/Events/MessagePosted.php#37
Я запускаю подобное событие с моего контроллера
broadcast(new MessagePosted($message, $user))->toOthers();
Он должен транслировать сообщение и пользователя на это событие.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Message;
use App\Events\MessagePosted;
class MessageController extends Controller
{
public function store(Request $request)
{
$user = Auth::user();
// Store the new message
$message = $user->messages()->create([
'message' => $request->get('message')
]);
// Announce that a new message has been posted
broadcast(new MessagePosted($message, $user))->toOthers();
return ['status' => 'OK'];
}
}
Я не понимаю, что происходит с тех пор, как я видел, как люди говорят, проверяйте импорт, но я импортировал правильные классы в контроллер.
Убедитесь, что ваш файл MessagePosted
похож на этот
<?php
namespace App\Events;
use App\User; //your model
use App\Message; //your model
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class MessagePosted implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public $user;
public function __construct(Message $message, User $user)
{
$this->message = $message;
$this->user = $user;
}
public function broadcastOn()
{
return new PrivateChannel('channel-name'); // your channel name
}
}
Вы передавали App\Message
в конструктор MessagePosted
. Ошибка указывает на то, что ваш MessagePosted
принимает App\Events\Message
вместо App\Message
. Обычно это происходит, когда вы забыли use App\Message
в вашем MessagePosted
, поэтому он использует пространство имен MessagePosted
, которое является App\Events
для Message
, в результате получается App\Events\Message
.
Короче говоря, use App\Message
в вашем классе MessagePosted
.
Вы можете выложить свой файл
MessagePosted
?