Development

Documentation/vi_VN/UsingTheSymfonyEventSystem (diff)

You must first sign up to be able to contribute.

Changes between Version 1 and Version 2 of Documentation/vi_VN/UsingTheSymfonyEventSystem

Show
Ignore:
Author:
tentamen (IP: 222.252.117.215)
Timestamp:
03/12/09 08:29:49 (9 years ago)
Comment:

fix typo

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/vi_VN/UsingTheSymfonyEventSystem

    v1 v2  
    22#!WikiMarkdown  
    33 
    4 Trong bài này tôi sẽ hướng dẫn bạn cách sử dụng hệ thống event có sẵn trong symfony. Ví dụ bạn có một website mà người dùng có thể bầu chọn cho bức ảnh của những người khác trong hệ thống. Mỗi khi người dùng bầu chọn một bức ảnh, một số hành đọng xảy ra dựa vào business rules
     4Trong bài này tôi sẽ hướng dẫn bạn cách sử dụng hệ thống event có sẵn trong symfony. Hãy tưởng tượng bạn có một website mà người dùng có thể bầu chọn cho bức ảnh của những người khác trong hệ thống. Mỗi khi người dùng bầu chọn một bức ảnh, một số hành động xảy ra dựa vào business rule
    55 
    6   * Tăng điển cho người dùng ở db 
    7   * Cập nhật số ảnh người dùng đã bầu chon ở session 
     6  * Tăng điểm cho người dùng ở database 
     7  * Cập nhật số ảnh người dùng đã bầu chn ở session 
    88  * Xóa cache của template hiển thị số ảnh mà người dùng bầu chọn 
    99 
    10 Chúng ta có thể override phương thức `Image::save()` để thêm một hook, khi đó mỗi khi người dung bầu chọn 1 bức ảnh 3 hành động này sẽ được thực thi. Điều này có thể đem lại một số hệ quả ko mong muốn: nếu người dùng upload một bức ảnh, chúng ta lưu thông tin vào database nhưng sẽ ko cần xóa cache và chứa thông tin ở session. Tương tự, nếu chúng ta có một chương trình quản lý ảnh ở backend, mỗi khi admin sửa lại một bức ảnh phương thức `save()` sẽ được gọi kèm theo tất cả các hành động chúng ta đã thêm. 
     10Chúng ta có thể override phương thức `Image::save()` để thêm một hook, khi đó mỗi khi người dùng bầu chọn một bức ảnh 3 hành động này sẽ được thực thi. Điều này có thể đem lại một số hệ quả ko mong muốn: nếu người dùng upload một bức ảnh, chúng ta lưu thông tin vào database nhưng sẽ ko cần xóa cache và chứa thông tin ở session. Tương tự, nếu chúng ta quản lý ảnh ở backend, mỗi khi admin sửa lại một bức ảnh phương thức `save()` sẽ được gọi kèm theo tất cả các hành động chúng ta đã thêm. 
    1111 
    1212Sử dụng Symfony Event System 
    1313---------------------------- 
    1414 
    15 Từ version 1.1, symfony cung cấp event notification system. Thông thường, các lớp của framework gửi đi sự kiện ở thời điểm nào đó trongg thời gian chạy ứng dụng. Chúng ta có thể đăng kí các listener để lăng nghe event. Chúng ta cũng có thể tự tạo các event của riêng mình. 
     15Từ version 1.1, symfony cung cấp event notification system. Thông thường, các lớp của framework gửi đi sự kiện ở thời điểm nào đó trong thời gian chạy ứng dụng. Chúng ta có thể đăng kí listener để lắng nghe các event. Chúng ta cũng có thể tự tạo các event của riêng mình. 
    1616 
    1717Bạn có thể tìm hiểu thêm về symfony event system ở các link sau: 
    3232    } 
    3333 
    34 Event `images.image_rated` sẽ được gắn với action `rateImage`.Phương thức khởi tạo sfEvent nhận 3 tham số theo thứ tự: event subject, event name và mảng các option của event handler. Do `sfEvent` implement ArrayAccess interface nên chúng ta có thể gọi các parameter đơn giản như sau: `$event['my_parameter']`. 
     34Event `images.image_rated` sẽ được gắn với action `rateImage`. Phương thức khởi tạo sfEvent nhận 3 tham số theo thứ tự: event subject, event name và mảng các option của event handler. Do `sfEvent` implement ArrayAccess interface nên chúng ta có thể gọi các parameter đơn giản như sau: `$event['my_parameter']`. 
    3535 
    3636>**TIP** 
    3737>Về ArrayAccess interface bạn có thể tìm hiểu trong [tài liệu PHP](http://cn2.php.net/manual/en/class.arrayaccess.php). 
    3838 
    39 Bước tiếp theo là thực hiện việc lắng nghe event này. Chúng ta có thể thêm listeners ở một số chỗ trong ứng dụng symfony. Trong ví dụ này chúng ta sẽ thêm vào trong file cấu hình ứng dụng. Thực hiện việc đăng kí listeners như sau: 
     39Bước tiếp theo là thực hiện việc lắng nghe event này. Chúng ta có thể thêm listeners ở một số chỗ trong ứng dụng symfony. Trong ví dụ này chúng ta sẽ thêm vào trong file cấu hình của application. Thực hiện việc đăng kí listeners như sau: 
    4040 
    4141    [php] 
    5555Như bạn có thể thấy, lớp cấu hình application có thể tham chiếu đến symfony event dispatcher. Chúng ta thêm code để notify khi sự kiện `images.image_rated` xảy ra. Bây giờ, chúng ta tạo lớp `UsersManager` cung cấp các phương thức để lắng nghe sự kiện. Trước khi đi vào code lớp `UsersManager` chúng ta sẽ nói về lớp `sfEventDispatcher`. 
    5656 
    57 Từ symfony book chúng ta biết rằng lớp này cung cấp cơ chế để thêm/xóa listener và notify event. Hãy xem một số phương thức `sfEventDispatcher`: 
     57Từ symfony book chúng ta biết rằng lớp này cung cấp cơ chế để thêm/xóa listener và notify event. Hãy xem một số phương thức public của `sfEventDispatcher`: 
    5858 
    5959### public function connect($name, $listener) 
    6060 
    61 Chúng ta sử dụng phương thức này trong lớp frontendConfiguration để đăng kí listeners với sự kiện chúng ta tạo ra. Tham số đầu tiên là tên sự kiện (ở đây là `images.image_rated`) tham số thứ 2 listener là biến kiểu PHP callback. 
     61Chúng ta sử dụng phương thức này trong lớp `frontendConfiguration` để đăng kí listeners với sự kiện chúng ta tạo ra. Tham số đầu tiên là tên sự kiện (ở đây là `images.image_rated`) tham số thứ 2 listener là biến kiểu PHP callback. 
    6262 
    6363>**TIP** 
    104104    } 
    105105 
    106 Ở phương thức `addPointsToUser()`, chúng ta lấy về điểm hiện tại của người dùng từ session, thêm điểm mới và chứa vào database. 
     106Ở phương thức `addPointsToUser()`, chúng ta lấy về số điểm hiện tại của người dùng từ session, cộng thêm điểm và chứa vào database. 
    107107 
    108108Phương thức `updateSessionPoints()` bên dưới hoạt động tương tự nhưng chúng ta cập nhật session. 
    109109 
    110110>**Note** 
    111 >Nếu bạn quan tâm đến cách chúng ta truy cập symfony session user, câu trả lời nằm trong symfony events system. Symfony cung cấp instance của action hiện tại dưới dạng subject của sự kiện chúng ta tạo ra . Trong symfony, action có thể truy cập session user bằng cách gọi `$this->getUser()` như chúng ta đã làm trong ví dụ. 
     111>Nếu bạn quan tâm đến cách chúng ta truy cập symfony session user, câu trả lời nằm trong symfony events system. Symfony cung cấp instance của action hiện tại dưới dạng subject của sự kiện chúng ta tạo ra . Trong symfony, action có thể truy cập session user bằng cách gọi `$this->getUser()`, như chúng ta đã làm trong ví dụ. 
    112112 
    113 Event listener cuối cùng mà chúng ta đăng kí là `UsersManager::clearRatePartial()`, là một instance của `View Cache Manager` và chúng ta thực hiện việc xóa cache tương ứng. 
     113Event listener cuối cùng mà chúng ta đăng kí là `UsersManager::clearRatePartial()`, là một instance của `View Cache Manager`, thực hiện việc xóa cache tương ứng. 
    114114 
    115115Kết luận 
    116116-------- 
    117117 
    118 Symfony event system cung cấp cho ứng dụng của bạn những kĩ thuật mới. Nó có thể được dùng để xây dựng các hệ thống highly decouple, leaving away glue code. Sau khi bạn sử dụng công nghệ này, thật dễ dang để xây dựng slim controllers để tận dụng tối đa sức mạnh của MVC. 
     118Symfony event system cung cấp cho ứng dụng của bạn những khả năng mới. Nó có thể được dùng để xây dựng các hệ thống highly decouple, leaving away glue code. Sử dụng công nghệ này, bạn có thể dễ dàng xây dựng slim controllers để tận dụng tối đa sức mạnh của MVC. 
    119119}}}