Аргумент должен быть экземпляром сообщения в трансляции laravel. - PullRequest
0 голосов
/ 01 мая 2018

Когда я настраиваю вещание, я получаю эту ошибку:

Аргумент 1 передан в App \ Events \ MessagePosted :: __ construct () должен быть экземпляр App \ Events \ Message, данный экземпляр App \ Message, вызывается в /var/www/epg/app/Http/Controllers/MessageController.php на строка 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'];
    }
}

Я не понимаю, что происходит, поскольку то, что, как я видел, говорят люди, проверяет ваш импорт, но я импортировал нужные классы в контроллер.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Вы передавали App\Message в конструктор MessagePosted. Ошибка указывает, что ваш MessagePosted принимает App\Events\Message вместо App\Message. Это имеет место, когда вы забыли набрать use App\Message в вашем MessagePosted, поэтому он использует пространство имен MessagePosted, равное App\Events для Message, в результате App\Events\Message.

Короче говоря, use App\Message в вашем MessagePosted классе.

0 голосов
/ 04 апреля 2019

Убедитесь, что ваш 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...