2017-10-05 74 views
0

我已经在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'); 
    } 
} 

Controller类

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级赛事。请提出这里有什么问题。

+1

只是把它从你的控制器 – usrNotFound

+0

@usrNotFound,但如何? – Hitendra

+0

选中此项,如何在控制器中分派事件:https://laravel.com/docs/5.5/events#dispatching-events – C2486

回答

1

第1步: 请检查您的应用程序namespace App\Providers;此路径用于事件到监听器的映射。

第2步: 加入这一行你的函数:

Event::fire(app()->make('App\Events\YourEventClassName', [$data])); 

$的数据是可选的。

第3步: 编写您想要在侦听器中执行的所有代码,这些代码已经映射。

0

好的,你可以使用观察者,如果你想要或直接从控制器调用事件。

这里是你如何利用观察员

<?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 
    } 

} 
相关问题