Một event là một action hay một hành động ngoài ý muốn được nhận dạng bởi một chương trình có thể được kiểm soát bởi một chương trình khác. Event trong Laravel đơn giản là cung cấp việc thực hiện quan sát. Event có thể được kiểm soát bằng những bước sau:
>>> Xem full Series về Laravel Framework <<<
Bước 1 – Tạo một lớp Event bằng lệnh sau:
1
|
php artisan make:event <event–class>
|
Ở đây <event-class> nên được thay thế bởi tên của lớp event. Lớp được tạo ra sẽ lưu tại thư mục appEvents.
Bước 2 – Tạo một lớp handler để kiểm soát event vừa tạo ra bằng lệnh sau:
1
|
php artisan handler:event <handler–class> —event = <event–class>
|
Ở đây <event-class> nên được thay thế bởi tên của lớp Event mà ta đã tạo ở bước 1 và <handler-class> nên được thay thế bởi tên của lớp handler. Lớp Handler mới được tạo ra sẽ được lưu tại thư mục appHandlersEvents.
Bước 3 – Đăng ký lớp event và handler của nó trong lớp EventServiceProvider.
Giờ chúng ta cần đăng ký event và lớp handler của nó trong file appProvidersEventServiceProvier.php. File này bao gồm một mảng được gọi là $listen. Trong mảng này, chúng ta cần thêm lớp event như là một key và lớp event handler như giá trị của nó.
Bước 4 – Hủy event
Bước cuối cùng đó là hủy event với Event facade. Phương thức fire() nên được gọi để lấy đối tượng của lớp event. Event có thể được hủy bằng cách sau:
1
|
Event::fire(<Event Class Object>);
|
<Event Class Object> nên được thay thế với đối tượng của lớp Event.
Tips: kiến thức Lập trình PHP sẽ giúp bạn tự tin hơn khi học lập trình Laravel
Ví dụ
Bước 1 – Tạo một controller CreateStudentController bằng lệnh:
1
|
php artisan make:controller CreateStudentController —plain
|
Bước 2 – Sau khi chạy xong kêt quả là
Bước 3 – Sao chép code sau vào file app/Http/Controllers/CreateStudentController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<span class=“pun”><?</span><span class=“pln”>php
</span><span class=“kwd”>namespace</span> <span class=“typ”>App</span><span class=“pln”>HttpControllers</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>Illuminate</span><span class=“pln”>HttpRequest</span><span class=“pun”>;</span>
<span class=“kwd”>use</span><span class=“pln”> DB</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>App</span><span class=“pln”>HttpRequests</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>App</span><span class=“pln”>HttpControllersController</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>App</span><span class=“pln”>EventsStudentAdded</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>Event</span><span class=“pun”>;</span>
<span class=“kwd”>class</span> <span class=“typ”>CreateStudentController</span> <span class=“kwd”>extends</span> <span class=“typ”>Controller</span> <span class=“pun”>{</span>
<span class=“kwd”>public</span> <span class=“kwd”>function</span><span class=“pln”> insertform</span><span class=“pun”>(){</span>
<span class=“kwd”>return</span><span class=“pln”> view</span><span class=“pun”>(</span><span class=“str”>‘stud_add’</span><span class=“pun”>);</span>
<span class=“pun”>}</span>
<span class=“kwd”>public</span> <span class=“kwd”>function</span><span class=“pln”> insert</span><span class=“pun”>(</span><span class=“typ”>Request</span><span class=“pln”> $request</span><span class=“pun”>){</span><span class=“pln”>
$name </span><span class=“pun”>=</span><span class=“pln”> $request</span><span class=“pun”>–></span><span class=“pln”>input</span><span class=“pun”>(</span><span class=“str”>‘stud_name’</span><span class=“pun”>);</span><span class=“pln”>
DB</span><span class=“pun”>::</span><span class=“pln”>insert</span><span class=“pun”>(</span><span class=“str”>‘insert into student (name) values(?)’</span><span class=“pun”>,[</span><span class=“pln”>$name</span><span class=“pun”>]);</span><span class=“pln”>
echo </span><span class=“str”>“Record inserted successfully.<br/>”</span><span class=“pun”>;</span><span class=“pln”>
echo </span><span class=“str”>‘<a href = “/event”>Click Here</a> to go back.’</span><span class=“pun”>;</span>
<span class=“com”>//firing an event</span>
<span class=“typ”>Event</span><span class=“pun”>::</span><span class=“pln”>fire</span><span class=“pun”>(</span><span class=“kwd”>new</span> <span class=“typ”>StudentAdded</span><span class=“pun”>(</span><span class=“pln”>$name</span><span class=“pun”>));</span>
<span class=“pun”>}</span>
<span class=“pun”>}</span>
|
Bước 4 – Tạo một event gọi là StudentAdded bằng lệnh:
1
|
php artisan make:event StudentAdded
|
Bước 5 – Kết quả:
Bước 6 – Câu lệnh ở trên sẽ tạo ra một file event tại AppEventsStudentAdded.php. Sao chép code sau vào file đó:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<span class=“pun”><?</span><span class=“pln”>php
</span><span class=“kwd”>namespace</span> <span class=“typ”>App</span><span class=“pln”>Events</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>App</span><span class=“pln”>EventsEvent</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>Illuminate</span><span class=“pln”>QueueSerializesModels</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>Illuminate</span><span class=“pln”>ContractsBroadcastingShouldBroadcast</span><span class=“pun”>;</span>
<span class=“kwd”>class</span> <span class=“typ”>StudentAdded</span> <span class=“kwd”>extends</span> <span class=“typ”>Event</span> <span class=“pun”>{</span>
<span class=“kwd”>use</span> <span class=“typ”>SerializesModels</span><span class=“pun”>;</span>
<span class=“kwd”>public</span><span class=“pln”> $name</span><span class=“pun”>;</span>
<span class=“kwd”>public</span> <span class=“kwd”>function</span><span class=“pln”> __construct</span><span class=“pun”>(</span><span class=“pln”>$name</span><span class=“pun”>)</span> <span class=“pun”>{</span><span class=“pln”>
$this</span><span class=“pun”>–></span><span class=“pln”>name </span><span class=“pun”>=</span><span class=“pln”> $name</span><span class=“pun”>;</span>
<span class=“pun”>}</span>
<span class=“kwd”>public</span> <span class=“kwd”>function</span><span class=“pln”> broadcastOn</span><span class=“pun”>()</span> <span class=“pun”>{</span>
<span class=“kwd”>return</span> <span class=“pun”>[];</span>
<span class=“pun”>}</span>
<span class=“pun”>}</span>
|
Bước 7 – Tạo một event handler gọi là HandleNewStudentAdded bằng lệnh
1
|
php artisan handler:event HandlerNewStudentAdded —event = StudentAdded
|
Bước 8 – Sau khi tạo xong:
Bước 9 – Lệnh phía trên sẽ tạo một file event handler tại appHandlersEventsHandleNewStudentAdded.php. Sao chép code sau vào file đó:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php
namespace AppHandlersEvents;
use AppEventsStudentAdded;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;
class HandleNewStudentAdded {
protected $name;
public function __construct() {
//
}
public function handle(StudentAdded $event) {
$this–>name = $event–>name;
echo “<br>New Student added in database with name: “.$this–>name;
}
}
|
Bước 10 – Giờ bạn cần phải thêm lớp event và lớp handler của nó vào một file lưu tại ppProvidersEventServiceProvider.php. Chú ý dòng được in đậm và thêm dòng đó vào trong file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<span class=“pun”><?</span><span class=“pln”>php
</span><span class=“kwd”>namespace</span> <span class=“typ”>App</span><span class=“pln”>Providers</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>Illuminate</span><span class=“pln”>ContractsEventsDispatcher </span><span class=“kwd”>as</span> <span class=“typ”>DispatcherContract</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>Illuminate</span><span class=“pln”>FoundationSupportProvidersEventServiceProvider </span><span class=“kwd”>as</span> <span class=“typ”>ServiceProvider</span><span class=“pun”>;</span>
<span class=“kwd”>class</span> <span class=“typ”>EventServiceProvider</span> <span class=“kwd”>extends</span> <span class=“typ”>ServiceProvider</span> <span class=“pun”>{</span>
<span class=“com”>/**
* The event listener mappings for the application.
*
* @var array
*/</span>
<span class=“kwd”>protected</span><span class=“pln”> $listen </span><span class=“pun”>=</span> <span class=“pun”>[</span>
<span class=“str”>‘AppEventsSomeEvent’</span> <span class=“pun”>=></span> <span class=“pun”>[</span>
<span class=“str”>‘AppListenersEventListener’</span><span class=“pun”>,</span>
<span class=“pun”>],</span>
<span class=“str”>‘AppEventsStudentAdded’</span> <span class=“pun”>=></span> <span class=“pun”>[</span>
<span class=“str”>‘AppHandlersEventsHandleNewStudentAdded’</span><span class=“pun”>,</span>
<span class=“pun”>],</span>
<span class=“pun”>];</span>
<span class=“com”>/**
* Register any other events for your application.
*
* @param IlluminateContractsEventsDispatcher $events
* @return void
*/</span>
<span class=“kwd”>public</span> <span class=“kwd”>function</span><span class=“pln”> boot</span><span class=“pun”>(</span><span class=“typ”>DispatcherContract</span><span class=“pln”> $events</span><span class=“pun”>)</span> <span class=“pun”>{</span><span class=“pln”>
parent</span><span class=“pun”>::</span><span class=“pln”>boot</span><span class=“pun”>(</span><span class=“pln”>$events</span><span class=“pun”>);</span>
<span class=“com”>//</span>
<span class=“pun”>}</span>
<span class=“pun”>}</span>
|
Bước 11 – Thêm đoạn sau vào app/Http/routes.php.
1
2
|
Route::get(‘event’,‘CreateStudentController@insertform’);
Route::post(‘addstudent’,‘CreateStudentController@insert’);
|
Bước 12 – Vào URL sau để test event
http://localhost:8000/event
Bước 13 – Kết quả:
Bước 14 – Thêm tên của học sinh vào trường Name rồi ấn vào “Add Student”, bạn sẽ được chuyển sang trang như bên dưới. Nhìn vào dòng được gạch chân màu xám. Chúng ta đã thêm dòng này vào phương thức handle của chúng ta trong lớp HandleNewStudentAdded, nó cho ta thấy các câu lệnh được chạy trong phương thức handle khi mà một event bị hủy.