LARAVEL TUTORIALS
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Sử dụng Event trong Laravel

Trong bài này mình sẽ giới thiệu event, cách tạo event và bắt event trong Laravel. Không chỉ có Laravel mà ngay cả Zend, Phalcon đều có khái niệm này nên bạn có thể thấy tầm quan trọng của nó rồi đấy.

1. Event trong Laravel là gì?

Event dịch theo đúng ý nghĩa của nó là "sự kiện", đây là một khái niệm khá quen thuộc khi bạn làm việc với javascript như sự kiện click, sự kiện hover, .. Nhưng chúng ta đang làm việc vói PHP cho nên về nguyên tắc sử dụng có sự khác biệt một chút. Để hiểu hơn thì mình lấy ví dụ đơn giản như sau, giả sử bạn có sự kiện sinh nhật, trong sự kiện này bạn có nhiều hành động để xây dựng nó như mời bạn bè đến chơi, mua bánh, mua kẹo, đặt tiệc tại nhà hàng, ... thì event trong laravel cũng tương tự, bạn có thể tạo ra 1 event và ở event đó bạn có thể có rất nhiều hành động.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Vẫn còn mơ hồ thì ta bắt tay vào tìm hiểu ngay nhé.

2. Cách sử dụng Event trong Laravel

Tạo Event trong laravel

Để tạo event bạn sử dụng đối tượng Event và gọi đến phương thức fire() qua cách gọi một phương thức tĩnh.

$response = Event::fire('event.name', array($value,$value2));

Trong đó:

  • event.name là tên Event
  • array($value,$value2) là các giá trị truyền vào cho event
Ví dụ: Tạo Event login và tham số truyền vào là username và password

$response = Event::fire('event.login', array('freetuts.net','123456'));

Bắt Event trong laravel

Sau khi tạo event thì bạn có thể bắt event thông qua phương thức listen() trong đối tượng Event.

Event::listen('event.name', $callback);

Trong đó:

  • event.name là tên event mà ta đã tạo ở trên (sử dụng phương thức fire())
  • $callback có thể là function callback hoặc Class
Ví dụ: Bắt event login mà ta đã tạo ở trên

Trường hợp sử dụng function callback:

Event::listen('event.login', function($username, $password){
    // Handle the event...
});

Trường hợp sử dụng class callback:

Event::listen('event.login', 'LoginHandler ');
class LoginHandler {
    public function handle($value){
        // code here
    }
}

Như vậy trong lớp ban phải có phương thức handle() và phương thức này sẽ tự động được gọi.

Một Event có thể được bắt nhiều lần

Để bắt nhiều lần thì ta sử dụng phương thức listen() gọi tới nhiều lần.

Event::listen('event.name', $callback);
Event::listen('event.name', $callback2);
Event::listen('event.name', $callback3);
Event::listen('event.name', $callback4);
Event::listen('event.name', $callback5);
// ...

3. Ý nghĩa của Event trong Laravel

Để hiểu hơn thì mình xin lấy ví dụ như sau. Giả sử web bạn có chức năng đăng ký đăng nhập tài khoản, ban đầu bạn chỉ cần đăng ký rồi đăng nhập là được, một thời gian sau bạn cần đăng ký và gửi mail kích hoạt, thời gian sau nữa bạn muốn đăng ký từ vào ngày chẵn thì tặng điểm thưởng, thời gian sau nữa bạn lại muốn ghi lại thời gian đăng nhập. Như vậy chẳng lẽ mỗi lần muốn thêm bạn lại vào code lần mò và sửa lại và thêm hay sao, như thế thì chẳng hay chút nào mà còn cực nữa.

Laravel đưa ra event là một giải pháp tốt nhất để giải quyết vấn đề này. Đăng ký bạn chỉ cần tạo sự kiện user.created, đăng nhập bạn tạo sự kiện user.logged và cứ như thế sau này bạn muốn tác động vào giai đoạn đăng ký thì bắt event user.created và làm những việc mình muốn mà không cần can thiệp tới code cũ.

Vấn đề nữa đặt ra là vậy thì đặt code bắt sự kiện ở đâu? Nếu bạn làm nhiều rồi sẽ tự thấy rằng nên đặt ở đâu, nhưng ở đây bạn nào chưa biết thì mình gợi ý cho một cách đặt:

Bạn tạo thư mục app/Projects/Events/Users/ và tạo file EventServiceProvider.php trong thư mục app/Projects/Events/ với nội dung như sau:

<?php
namespace Projects\Events;

use Illuminate\Support\ServiceProvider;
class EventServiceProvider extends ServiceProvider {
	public function register()
	{
		//đăng ký class bắt event, ví dụ $this->app->events->subscribe(new UserEventHandler);
	}
}

Bạn mở file composer.json bổ sung thêm nội dung sau:

"psr-4":{
	"Projects\\Events\\" : "app/Projects/Events"
}

Đây là hình tham khảo vị trí bổ sung:

su dung event trong laravel PNG

Sau đó bạn mở command và chạy lệnh: composer dump-auto. (xem thêm về autoload psr4 tại http://www.php-fig.org/psr/psr-4/)

Bạn mở file app/config/app.php và thêm đoạn code sau vào vị trí cuối cùng của providers

'Projects\Events\EventServiceProvider',

Như vậy là đã xong việc autoload event theo app của bạn, và việc này chỉ cần làm một lần đầu tiên.

Tiếp theo là đăng ký các class event listen vào provider, ở đây mình sẽ lấy ví dụ về việc tạo class bắt sự kiện event user.ceated và sẽ gửi mail kích hoạt.

Bạn tạo hai files UserEventHandler.phpSendMailActive.php trong thư mục Users, sau đó tạo hai class UserEventHandlerSendMailActive tương đương với tên từng file:

<?php namespace Projects\Events\Users;
class UserEventHandler{
   	public function subscribe($events){
      		//Lưu ý: để sử dụng ::class thì bạn phải sử dụng php 5.5 trở lên
      		$events->listen('user.created', SendMailActive::class);
      		//Nếu sử dụng php 5.4
      		$events->listen('user.created', 'Projects\Events\Users\SendMailActive');
   	}
}

<?php
namespace Projects\Events\Users;
use User;
class SendMailActive{
	public function handle( $value ){
		//code sendmail
	}
}

Trong action register() của class EventServiceProvider bạn thêm đoạn code sau:

$this->app->events->subscribe(new UserEventHandler);

Đừng quên đặt đoạn code sau trên đầu file EventServiceProvider.php nhé (vì ta đã sử dụng class UserEventHandler ):

use Projects\Events\Users\UserEventHandler;

Vậy là đã xong, bạn chỉ việc tạo event khi tạo tài khoản thành công.

Event::fire('user.created', array($user));

Bạn nên đặt nó ở controller sau khi tạo tài khoản thành công, $user là tên biến chứa user object.

Kết luận

Túm váy lại, event là một thứ vô cùng tuyệt vời, giúp ta mở rộng tính năng mà không gặp quá nhiều trở ngại. Ở các bài tiếp theo, mình sẽ giới thiệu về model presenter, custom filter, ... song song với các bài hướng dẫn về laravel cơ bản.

Cùng chuyên mục:

Bài 1: Laravel là gì? hướng dẫn cài đặt laravel bằng Composer

Bài 1: Laravel là gì? hướng dẫn cài đặt laravel bằng Composer

Bài 04: Tìm hiểu cấu trúc của Laravel 5.x

Bài 04: Tìm hiểu cấu trúc của Laravel 5.x

Và trong bài này, chúng ta sẽ tìm hiểu cấu trúc của Laravel để có…

Bài 03: Hướng dẫn cài đặt Laravel 5.x

Bài 03: Hướng dẫn cài đặt Laravel 5.x

Để bắt đầu series tự học Laravel 5x thì công việc đầu tiên là bạn…

Bài 02: Hướng dẫn sử dụng Composer PHP

Bài 02: Hướng dẫn sử dụng Composer PHP

Composer là một công cụ tuyệt vời cho tín đồ PHP và trong bài này,…

Bài 11: Sử dụng Query Builder (Model) trong laravel

Bài 11: Sử dụng Query Builder (Model) trong laravel

Model trong mô mình MVC dùng để tương tác với cơ sở dữ liệu và…

Bài 10: Sử dụng Blade template engine trong Laravel

Bài 10: Sử dụng Blade template engine trong Laravel

Template engine có tác dụng giúp sạch đi những đoạn code PHP nằm trong View…

Bài 4: Sử dụng View trong laravel

Bài 4: Sử dụng View trong laravel

Trong bài này chúng ta sẽ tìm hiểu đến View, một thành phần khá quan…

Bài 3: Sử dụng Controller trong laravel

Bài 3: Sử dụng Controller trong laravel

Sau khi route nhận được request thì sẽ chuyển hướng request đến cho controller và…

Bài 07: Sử dụng Route::filter và Route::group trong laravel

Bài 07: Sử dụng Route::filter và Route::group trong laravel

Giới thiệu về 2 loại route rất quan trọng trong việc xử lý logic và…

Bài 06: Sử dụng Route::controller và Route::resource trong laravel

Bài 06: Sử dụng Route::controller và Route::resource trong laravel

Ở bài trước mình có giới thiệu tổng quan về rout trong Laravel và việc…

Bài 02: Tổng quan về route trong laravel

Bài 02: Tổng quan về route trong laravel

Trong khuôn khổ bài viết này, mình sẽ giới thiệu đến bạn route trong laravel…

Bài 04: Những công cụ tốt nhất hỗ trợ học laravel

Bài 04: Những công cụ tốt nhất hỗ trợ học laravel

Trước hết, ai khi học php đều chọn cho mình 1 IDE hoặc text editor…

Bài 02: Cấu trúc thư mục cơ bản của Laravel

Bài 02: Cấu trúc thư mục cơ bản của Laravel

Bất kì một Framework nào cũng đưa ra một mô hình các cấu trúc thư…

Bài 03: Cài đặt Openserver và tạo domain ảo trên localhost

Bài 03: Cài đặt Openserver và tạo domain ảo trên localhost

Trong bài 3 này mình sẽ giới thiệu các bạn cách tạo tên miền ảo…

Bài 01: Composer là gì?

Bài 01: Composer là gì?

Composer là một công cụ quản lý các thư viện trong PHP (Dependency Management), công…

Một cách quản lý filter trong Laravel

Một cách quản lý filter trong Laravel

Filter là một thành phần tuyệt vời mà laravel cung cấp cho chúng ta, nó…

Bài 01: Laravel là gì? Hướng dẫn cài đặt laravel trên windows

Bài 01: Laravel là gì? Hướng dẫn cài đặt laravel trên windows

Trong chuỗi bài viết này mình sẽ viết về laravel 4.2.* trong môi trường windows,…

Top