2017-10-05 24 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 
    } 

} 
相關問題