私は以下のようにweb.phpでコントローラメソッド呼び出しを定義しています。laravel web.phpファイルのコントローラメソッドでイベントを定義する方法は?
Route::post('/order', '[email protected]');
OrderController @ createメソッドが呼び出されたときにイベントを呼び出すとします。どうやってやるの?私のイベントコールは
event(new NewOrderAdded());
私のイベントクラスです。
class NewOrderAdded implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new Channel('public-test-channel');
}
}
コントローラクラス
class OrderController extends Controller
{
public function create(Request $request){
$order = new Order([
'user_id' => $request->get('user_id'),
'person_id' => json_encode($request->get('person_id')),
'date_of_booking' => $request->get('date_of_booking'),
'total_order_price' =>$request->get('total_order_price'),
'ticket_id' => json_encode($request->get('ticket_id')),
'timeslot' => $request->get('timeslot'),
'status' => 'pending',
'add_on_id' => json_encode($request->get('add_on_id'))
]);
$order->save();
event(new NewOrderAdded($order));
return response()->json(array('order_id'=>$order->id));
}
}
ここで私はイベントを受信したいCLASです。 ViewBookings.vue
<script>
import moment from 'moment';
export default{
data(){
return{
users:[]
}
},
created:function(){
this.listen();
},
methods:{
listen(){
Echo.channel('public-test-channel')
.listen('NewOrderAdded', (data) => {
console.log("Event received");
});
}
}
}
</script>
私はこのコードを試してみましたが、私はViewBookings.vueクラスのイベントを受け取ることができないのです。ここで問題が何かを提案してください。
を使用したい場合は、ちょうどあなたのコントローラ – usrNotFound
@usrNotFoundが、どのようにそれを呼び出しますか? – Hitendra
コントローラにイベントをディスパッチする方法を確認してください。https://laravel.com/docs/5.5/events#dispatching-events – C2486