Web application framework Symfony 4 có gì hot
Symfony là 1 PHP framework được sử dụng rộng rãi để xây dựng các ứng dụng web có quy mô lớn, bên cạnh đó thư viện của nó còn được dùng làm nền tảng cho nhiều hệ thống như Magento 2, Drupal 8, phpBB… Các dự án nổi tiếng dùng Symfony. Dễ nhận thấy rằng Symfony là thư viện mạnh mẽ, ...
Symfony là 1 PHP framework được sử dụng rộng rãi để xây dựng các ứng dụng web có quy mô lớn, bên cạnh đó thư viện của nó còn được dùng làm nền tảng cho nhiều hệ thống như Magento 2, Drupal 8, phpBB… Các dự án nổi tiếng dùng Symfony.
Dễ nhận thấy rằng Symfony là thư viện mạnh mẽ, chuẩn hóa bậc nhất hiện nay. Nếu bạn là 1 tín đồ của PHP thì thật là thiếu sót khi chưa từng nghe qua cái tên đó.
Mình không ngại công bố là fan cuồng của Symfony, tuy hiện tại đang ăn nằm với Magento. Trước đây mình có sử dụng Symfony2, sau này tuy chuyển qua nhiều công nghệ khác nhưng mình vẫn yêu thích framework này vì cấu trúc bài bản khoa học của nó. Tới nay đã qua 6 năm (2012-2018) Symfony đã lên tới phiên bản 4, nhân dịp tìm hiểu lại “tình cũ”, mình viết bài này để mô tả thêm về Symfony cho các bạn đang tìm hiểu cũng như giới thiệu về các tính năng mới, nguyên tắc mới trong Symfony4.
Symfony là 1 web application framework viết bằng ngôn ngữ PHP, và hoàn toàn miễn phí. Khác với các loại framework khác như Zend hay CodeIgniter là tự xây dựng các thư viện của mình, thì Symfony gồm nhiều thành phần, thư viện khác nhau gộp thành 1 hệ thống, ứng dụng hoàn chỉnh. Điều này giống với câu “1 tay làm chẳng nên non, 4 tay chụm lại thành sòng tiến lên” vậy, thay vì 1 công ty xây dựng 100% ứng dụng thì Symfony sẽ tích hợp tinh hoa của 10 công ty làm thành 10% của ứng dụng mình. Đó là nguồn gốc của cái tên Symfony – Symphony có nghĩa là “bản giao hưởng”, như là 1 dàn nhạc giao hưởng với vô vàn nhạc cụ, nghệ sĩ cùng hòa ca tạo nên giai điệu du dương
« Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony. »
Đó có phải là 1 mớ hỗn độn?
Việc kết hợp những công nghệ tối tân nhất chưa chắc đã là cái tốt nhất, ví như ngôi nhà của bạn có toàn nội thất sang trọng, tivi xịn, tủ lạnh to… Nhưng xắp xếp lộn xộn chỉ làm tốn diện tích và bạn sẽ phát điên nếu sống trong căn nhà như thế:
Tất nhiên điều đó không xảy ra trong Symfony, các nhà thiết kế tài tình của SF đã khéo léo giao sự chủ động cho người dùng, đầu tiên khi cài đặt SF sẽ là bản đơn giản nhất, sau đó bạn muốn thêm tính năng nào, bạn cài thêm thành phần (component) cho chức năng ấy, việc vận hành, loading thư viện Symfony lo hết.
Ví dụ:
Để sử dụng tính năng dịch ngôn ngữ cho website bạn cần thư viện translation, khi đó bạn sẽ chạy lệnh:
1 |
composer require symfony/translation |
Sau đó thì bạn định nghĩa ngôn ngữ mặc định trong tập tin cấu hình: config/packages/translation.yaml
Và viết văn bản dịch thuật trong: translations/messages.vi.yaml
Có khoảng 50 components dành cho Symfony, mỗi cái lại có chức năng riêng biệt và mang tính tái sử dụng cao. Symfony components gồm code và tài liệu. Bạn thậm chí còn có thể sử dụng chúng độc lập hoàn toàn khỏi Symfony Framework, nhờ vào tính phóng khoáng này mà các Framework khác dễ dàng mang “thai” với Symfony, như Magento2, Laravel, Yii, CakePHP… Tức là có sử dụng component xây dựng bởi Symfony trong core của mình.Bạn có thể làm mọi thứ với Symfony
Thực sự Symfony rất “Imba”, khác với các Library Framework truyền thống, cộng đồng Symfony ngày nay đã xây dựng nên nhiều nền tảng đáp ứng cho mọi nhu cầu doanh nghiệp phức tạp như Product Information Management (Akeneo PIM), Content Management System (eZ Platform CMS, CMF), Customer Relationship Management (ORO CRM), eCommerce (Sylius eCommerce)… Và bạn tin được không? Toàn bộ là Open source – miễn phí cả đấy! Software is like sex: it’s better when it’s free.
Các nguyên tắc best practices
Kiến trúc Bundle-less
Trước đây, Symfony khuyến khích lập trình viên tổ chức ứng dụng thành các bundles, tức là các khối code có chức năng chuyên biệt (modules), ví dụ như FrontendBundle cho phần Frontend của customer và client, BackendBundle cho admin và manager. CMSBundle và EcommerceBundle cho 2 tính năng quản trị nội dung và thương mại điện tử…
Nhưng từ phiên bản 4 Symfony khuyến khích bỏ hết bundle, tất cả viết bên trong 1 folder duy nhất là src/
Lý do Symfony muốn đơn giản hóa ứng dụng. Có các trường phái trong kiến trúc ứng dụng web, 1 là chia nhỏ ứng dụng micro-applications hay micro-services, 2 là kiến trúc 1 khối monolith. Tất nhiên kiến trúc nào cũng có những ưu và nhược điểm của nó, tùy theo quy mô ứng dụng để bạn chọn lựa. May mắn thay Symfony tuyên bố hỗ trợ cả 2 loại kiến trúc này, dù thực sự phiên bản chuẩn nhất của Symfony thích hợp với loại 1 khối, code của bạn sử dụng các component symfony nằm trong vendor, việc chia nhỏ module và giải quyết bài toán lệ thuộc lẫn nhau, các mối quan hệ giữa chúng chỉ làm bạn phiền hà thêm mà thôi, make it simple.
Symfony Applications go minimal
Thời còn phiên bản 2, Symfony đã nổi danh như cồn bởi sức mạnh vượt trội đánh tan vết bẩn… À mình nhầm qua bột giặt. Nói chung rất là mạnh, nhưng 1 khuyết điểm là do nó mạnh quá, nên nó nặng nề, không phù hợp với các ứng dụng nhỏ. Nhưng thời đó qua lâu rồi, với Symfony 4, vendor của bạn được tinh giản tới mức tối đa để thực thi được 1 ứng dụng web cơ bản.
Khi bạn cần 1 chức năng nào đó có trong các component, bạn chạy lệnh composer require, sau đó Symfony sẽ tải về và tự cấu hình để bạn sử dụng được ngay, Symfony gọi đó là developer experience.
Chuẩn hóa là ưu tiên hàng đầu
Tuy được viết bằng PHP – thứ ngôn ngữ thiết kế tồi, mì ăn liền, phi chuẩn, lộn xộn, bát nháo và lỏng lẻo… nhưng Symfony luôn luôn mang chuẩn hóa ra làm nguyên tắc hàng đầu của mình.
Symfony là 1 trong những framework đầu tiên triển khai áp dụng chuẩn hóa PSR.
Tính năng nổi bật
Routing annotations
Trong các ứng dụng thông thường, ta sẽ khai báo 1 routing, mapping với 1 controller qua 1 URL.
Trong Symfony ta có 1 cách khác: khai báo phần routing ngay comment của controller action.
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
|
class BlogController extends AbstractController
{
/**
* Matches /blog exactly
*
* @Route("/blog", name="blog_list")
*/
public function list()
{
// ...
}
/**
* Matches /blog/*
*
* @Route("/blog/{slug}", name="blog_show")
*/
public function show($slug)
{
// $slug will equal the dynamic part of the URL
// e.g. at /blog/yay-routing, then $slug='yay-routing'
// ...
}
}
|
Các comment này không còn đóng vai trò mô tả cho con người nữa, nó còn có chuẩn và được cả máy đọc, những comment như vậy gọi là annotations
Đặc biệt hơn, trong phiên bản mới 4.1, annotations còn mạnh mẽ hơn nữa khi nó hỗ trợ được cả locale
1
2
3
4
5
6
7
8
9
10
|
/**
* @Route({
* "nl": "/over-ons",
* "en": "/about-us"
* }, name="about_us")
*/
public function about()
{
// ...
}
|
Cá nhân mình thấy annotations rất hay, nó tạo nên 1 sự liên kết chặt chẽ giữa controller và routing. Nếu theo cách truyền thống, có 1 URL bạn muốn biết controller nào được gọi, bạn tìm trong config/routes.yaml, sau khi có tên controller bạn mở file controller ra xem src/Controller/BlogController.php, controller này có truyền tham số, bạn quay lại routing để xem thông tin truyền vào của tham số đó… Rất bất tiện.
Học Symfony như xem phim Hàn Quốc
Nếu như Laravel rất được cồng đồng ủng hộ nhớ vào Laracasts – trang có các series hướng dẫn bằng video trực quan thì Symfony cũng có Symfonycasts, khiến việc học tập, tiếp thu của bạn dễ dàng hơn bao giờ hết.
Testing được đầu tư hơn
Tầm quan trọng của testing là không thể bàn cãi, nhất là trong dự án dài hơi.
Testing ở đây tức là lập trình viên khi viết chức năng nào đó thì họ phải viết đoạn code để test hết các case xảy ra trên đoạn code của mình (đảm bảo code bạn chạy đúng), và chạy lại toàn bộ các code test từ đầu tới cuối của dự án (đảm bảo chức năng có sẵn của người khác không bị ảnh hưởng).
Theo 1 bài viết từ 1 cụ dev của google How Google builds web frameworks, số dòng code trong các dự án nhà người ta lên tới hàng tỉ, số lần commit hàng triệu, với 25 ngàn lập trình viên trên khắp thế giới, thế mà họ vẫn khỏe re trong khi dự án của công ty có tầm 10 ông code, làm khoảng 1 năm là bắt đầu chắp vá, bơm hơi các kiểu, anh em phải thở oxy khi đi họp, truyền nước biển vào dịp cuối tuần sau cả ngày OT.
Lời kết
Mình mới search từ khóa Symfony trên ITViec thấy có 3 kết quả, Magento có 7 và PHP là 149. Chẳng lẽ bây giờ người ta thích build PHP thuần hay sao ấy nhỉ? Các bạn nào đang học hành nghiên cứu để kiếm việc thì cũng hơi thử thách với Symfony vì nhu cầu doanh nghiệp ở nước ta hạn chế. Ai cũng thích các sản phẩm mì ăn liền và đòi phải ngon bổ rẻ nghề lập trình – tiền hay đam mê, hy vọng với phiên bản 4 Symfony tinh gọn hơn có thể thích nghi tại Việt Nam.