【问题标题】:Laravel boadcastWith return nothingLaravel 广播没有返回
【发布时间】:2020-01-02 05:27:59
【问题描述】:

当我向服务器发出请求时,它什么也不返回或有时显示:

参数 #1 不是数组

当我将 dd 放入 broadcastWith 时,它会显示数据,但不会返回任何内容。我该如何解决这个问题?

这是我的控制器:

    namespace App\Http\Controllers;
    use App\Message;
    use App\Events\MessageEvent;
    use Illuminate\Http\Request;

    class MessageController extends Controller
    {
        public function index(){

         return event(new MessageEvent([1,2,34]));
        }
    }`

还有我的活动:

namespace App\Events;

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 MessageEvent implements ShouldBroadcast
{

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public $data;

    public function __construct($message)
    {
        $this->data = $message;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn(){
        return ['message'];
    }

    public function broadcastAs(){
        return 'messageEvent';
    }

    public function broadcastWith(){
    return $this->data;
    }
}

【问题讨论】:

    标签: php laravel events


    【解决方案1】:

    1) broadcastOn() 应该返回一个频道实例。

    public function broadcastOn() {
       return new PresenceChannel('messages');
       // or PrivateChannel() 
       // or Channel()
    }
    

    2) 默认情况下将返回所有public 属性,因此您不需要broadcastWith() 方法,除非您想操作数据。所以除非你想做这样的事情:

    public function broadcastWith(){
       return [
          'myData' => data
       ];
    }
    

    In this answer我解释的比较详细。

    【讨论】:

    • 感谢 senty,但它不起作用我认为这段代码在两天前工作,但现在它没有显示邮递员中的任何数据,我只想获取数据
    • 是的,我想明白了。我必须在我的客户端请求,我忘记了。它花了我 7 个小时
    • :D 是的,你需要返回response()->json($data)
    • 对不起,我耽误了你的时间,我知道了。
    • 我想调试代码时遇到问题,我在 broadcastOn 函数中添加了 dd('test') 但它不起作用。或在 channel.php 文件中。正常吗?
    猜你喜欢
    • 2023-03-24
    • 2014-05-11
    • 1970-01-01
    • 2020-02-18
    • 2018-01-03
    • 2020-04-16
    • 2017-11-07
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多