我在web.php中定义了控制器方法调用,如下所示。
Route::post('/order', 'OrderController@create');
我想在调用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类中接收事件。请在此处说明问题所在。
答案 0 :(得分:1)
第1步:
请检查您的应用程序namespace App\Providers;
此路径以获取侦听器映射事件。
第2步: 在你的函数中添加这一行:
Event::fire(app()->make('App\Events\YourEventClassName', [$data]));
$ data是可选的。
第3步: 在侦听器中编写您想要执行的所有代码,这些代码已经映射过。
答案 1 :(得分:1)
好的,如果你想要或者直接从控制器调用事件,你可以使用观察者。
以下是使用观察者的方法
<?php
namespace App\Observers;
use App\Order;
class OrderObserver
{
/**
* Listen to the Order created event.
*
* @param Order $order
* @return void
*/
public function created(Order $order)
{
//
}
/**
* Listen to the Order deleting event.
*
* @param Order $order
* @return void
*/
public function deleting(Order $order)
{
//
}
}
您的AppServiceProvider中的在Order::observe(OrderObserver::class);
方法
boot
现在每次创建或删除Order
对象时都会触发创建或删除。
或者如果你想使用控制器
<?php
namespace App\Http\controller;
class OrderController extends Controller
{
public function store(Request $request)
{
//.......
//after saving call your
event(new NewOrderAdded()) //even better pass user object here
}
}