03.07.19

Symfony là gì? Tổng quan về Symfony

5/5 - (1 bình chọn)

Nhắc tới Symfony, định nghĩa giúp ta dễ dàng hình dung nhất về nó có thể là: cơ sở căn bản cho các ứng dung PHP hiện đại. Tại Việt Nam, nhiều lập trình viên khá quen tai với Laravel, Magento, Drupal, điểm chung của các CMS hay framework mã nguồn mở này chính là việc chúng đều xây dựng dựa trên nền tảng Symfony, hoặc sử dụng một số Symfony component bên trong nó. 

Vì thế, không ngạc nhiên khi trên trang chủ, Symfony đã tóm gọn ý tưởng chính của nó bằng câu nói “create your own framework” (tự tạo nên framework của bạn). Với Symfony, bạn có thể tự tạo một nền tảng đặc thù cho nhu cầu rất riêng của bản thân hay của khách hàng. Không có giới hạn nào dành cho Symfony, vì nó đặc biệt mạnh mẽ, sáng tạo và linh hoạt, từ công đoạn phát triển tùy biến, kiểm thử, bảo mật và tối ưu hóa hiệu suất công việc, giúp bạn khai thác triệt để tiềm năng của PHP. 

Loạt bài về Symfony của Sutunam sẽ giúp ghi lại đôi điều thú vị từ framework này, nhưng trước mắt trong phạm vi của bài viết dưới đây, bạn sẽ hiểu về một số khái niệm quan trọng về cấu trúc và cách thức hoạt động của Symfony. 

 1. Cấu trúc của Symfony

Symfony được xây dựng xung quanh nhân Kernel chia hệ thống ra thành 3 loại đối tượng:

1.1 Components

Symfony components là các thư viện PHP tách rời và dễ dàng tái sử dụng. Mỗi component thực hiện một nhiệm vụ riêng biệt. Bản cài đầu tiên của Symfony có thể khá đơn giản, lập trình viên được trao quyền chủ động lựa chọn tính năng cần thiết, và cài đặt component cho tính năng đó. Đặc tính tách rời này giúp chúng không chỉ được sử dụng trong Symfony, mà còn đóng vai trò quan trọng trong core nhiều nền tảng khác. Ví dụ, bạn có thể nhìn thấy console được sử dụng rộng rãi ở nhiều dự án PHP phổ biến.

1. 2 Bundles

Bundles được ví như plugin trong Symfony. Chúng hoạt động với các chức năng chuyên biệt và được kết nối trực tiếp với môi trường của Symfony. Vậy Bundles khác biệt gì với Plugin ở trong các phần mềm khác? Tất cả mọi thứ trong Symfony đều là bundles, từ chức năng trong core framework, cho đến code được viết trong ứng dụng. Các bundles được thiết kế sao cho nó có thể được tái sử dụng ở nhiều ứng dụng khác nhau.

1. 3 Bridges

Bridges giúp việc kết nối trong Symfony trở nên dễ dàng hơn, chúng mở rộng các thư viện PHP để thích ứng trong Symfony. Một ví dụ như:

  • Twig bridge mở rộng các Symfony components để kết nối chúng với Twig
  • Twig bundles được sử dụng để cấu hình hoặc tích hợp Twig khi phát triển website

Cho nên Symfony có thể coi là một bộ công cụ. Trong đó, bạn đóng gói mọi thứ lại với nhau để tạo nên một ứng dụng Symfony hoàn chỉnh. Tuy nhiên, mỗi công cụ trong bộ đó cũng có thể hoạt động độc lập.

2. Lập trình website 

Trong Symfony, đoạn code PHP đầu tiên sẽ tạo ra một Request Object từ CGI Globals. Request này sẽ được truyền qua HttpKernel – để tạo ra các Response object.

Cơ chế Kernel được xây dựng xung quanh Event Dispatcher. Nó giúp mọi thứ trở nên linh hoạt hơn, nhưng mục đích chính là định tính trừu tượng các hành vi xử lý HTTP request. Toàn bộ khối lượng công việc được xử lý bởi Event listeners.

Ví dụ, RouterListener tiếp nhận event được thông báo thông qua kernel – kernel.request. Từ đó tạo lập các controller đủ điều kiện trong thuộc tính của Request Object.

3. Dependency Injection Component

Dependency Injection là một phần rất quan trọng trong lập trình hiện đại. Loại design pattern này cho phép ta có được Inversion of Control tuyệt vời trong code. Với cách này, việc phụ thuộc giữa các object trong phần mềm sẽ không được quy định tĩnh trong code, mà được quy định linh hoạt dựa trên runtime. Trong Symfony, loại pattern này được triển khai trong Container Object và dựa trên Quy chuẩn PSR-11.

Ví dụ: HttpKernel Object yêu cầu được khởi tạo với một EventDispatcher. Khi một HttpKernel được request tới Container, Container sẽ inject vào EventDispatcher dependency.

Khái niệm Dependency Injection là kỹ thuật thường gặp trong lập trình, mang lại rất nhiều lợi ích trong việc bảo trì code. Trong những bài viết sau, Sutunam sẽ gặp lại bạn với những giải thích cụ thể và chi tiết hơn về Dependency Injection, cũng như những đặc tính khác của Symfony.


Bạn là fan của PHP? Hoặc đơn thuần yêu thích riêng Symfony framework và muốn xây dựng những phần mềm tuyệt vời trên nền tảng này, vậy thì bạn và Sutunam đã có nhiều điểm tương đồng rồi! Chính vì thế, chúng tôi tin chắc rằng các chia sẻ trên Sutublog sẽ giúp ích đôi điều cho bạn, dù đó là những kiến thức bạn đã biết nhưng chưa hiểu kỹ, hay một số điều thú vị mà bạn chưa từng biết tới. Thế nên đừng bỏ lỡ những cập nhật sắp tới từ Sutublog nhé.

Nếu bạn cảm thấy bài viết hữu ích, hãy chia sẻ cho các lập trình viên khác cùng biết tới. Sutunam rất hào hứng với những trao đổi và phản hồi thêm từ các bạn để chúng ta có thể cùng thảo luận và trau dồi những kiến thức về Symfony! 

Về Thomas Bibaut