2017-10-18 65 views
0

嗨,我正在开发一个Laravel webapp,它使用事件broacasting troug redis和socket.io。所有的工作都很好,但我希望返回一个渲染视图作为Event的响应。 美事件是这样的:渲染一个视图作为事件广播的响应

<?php 

namespace App\Events; 

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 EventName implements ShouldBroadcast 
{ 
    use Dispatchable, InteractsWithSockets, SerializesModels; 

    /** 
    * Create a new event instance. 
    * 
    * @return void 
    */ 

    public $data; 

    public function __construct() 
    { 
     $this->data = array(
      'power'=> 'Funziona', 
      'view'=> view('dashboard.partials.messages')->render() 
     ); 
    } 

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

,我使用此代码来呈现网页上的回应:

<script src="/frontend/socket.io.js"></script> 
    <script> 
     var socket = io('http://1clickfashion.com:3002'); 
      socket.on("test-channel:App\\Events\\EventName", function(message){ 
      // increase the power everytime we load test route 
      alert(message.data.power); 
      $('#messages').html(''); 
      $('#messages').html(message.data.view); 

     }); 
    </script> 

正确显示“威力”警报,但认为不作为工作好。在另一种观点中,我使用视图作为return response()->json($view),并且完美地工作...有人有类似的问题?

回答

0

对于任何在这个问题上挣扎的人,通过将视图作为变量传递给Controller来解决。喜欢这个。

在控制器:

$view = view('dashboard.partials.messages')->with('post', $post_c)->render(); 
     event(new \App\Events\Post($view)); 

在事件:

public $data; 

    public function __construct($view) 
    { 
     $this->data = array(
      'view'=> $view 
     ); 
    }