logo
Published on

Từ Laravel sang Symfony - Những điểm giống và khác nhau của hai framework

Mục lục

Mở bài

Dạo gần đây mình bắt đầu chuyển từ Laravel sang Symfony do yêu cầu của dự án. Vừa bắt đầu với Symfony thì mình lập tức cảm nhận được sự khác biệt đến từ Symfony và Laravel, cụ thể là trong cách cấu trúc thư mục cho đến cách nó hoạt động. Bài viết này để mình tổng hợp lại kiến thức đã tìm hiểu cũng như là một bài viết để các bạn có thể tham khảo khi chuyển sang một framework mới.

Mindset - từ Laravel sang Symfony

Cái mà làm mình chật vật nhất chính là mindset, do đã làm việc được với Laravel một khoảng thời gian nên việc bị ảnh hưởng bởi mindset của một framework là điều khó tránh. Thay vì thấy được điểm mạnh của Symfony thì mình chỉ thấy toàn những điểm yếu. Một hồi sau thì bình tâm lại, tìm tòi những điểm khác biệt và tìm hiểu lý do xem Tại sao Symfony lại làm thế? Có điểm gì hay ho?. Sau khi thay đổi câu hỏi thì quả thực mình thấy có rất nhiều điểm thú vị mà Symfony mang đến. Và bây giờ hãy cùng mình xem những điều khác biết đó là gì nhé!

CLI - "Artisan" trên Symfony và Laravel

Làm việc với Laravel chắc chắn bạn không còn xa lạ gì với câu lệnh php artisan đó chính là anh trợ lý phù thuỷ giúp bạn hầu hết các công việc như tạo Model, Migration, Controller, ... và còn nhiều nữa. Còn trên Symfony chúng ta có bin/console. Hai cái này thì cũng như na ná nhau, chỉ có các câu lệnh là bạn phải học lại từ đầu. Mình chưa rõ build-in của console có thể hỗ trợ được cho ta những gì, nhưng nó vẫn có thể mở rộng và custom theo nhu cầu của bạn

Config - Cấu hình trên Symfony và Laravel

Ở trong Laravel thì tất cả cấu hình sẽ nằm trong thư mục /config và tất cả đều là các file PHP. Còn đối với Symfony, nó cũng nằm trong thư mục /config, có tất cả là 3 dạng cấu hình mặc định là Yaml, hai kiểu còn lại là XML và PHP. Việc Symfony chọn Yaml cũng không có gì là quá khó hiểu, các file Yaml thể hiện rõ hơn các cặp giá trị - thuộc tính, nếu nói một cách khách quan thì nó phù hợp hơn hẳn việc sử dụng một file PHP với mảng.

Route - Định tuyến trên Symfony và Laravel

Cái thứ hai cần phải là quen đó chính là route trên Symfony, ở trên Symfony file cấu hình route mặc định sẽ là file config/routes.yaml tương tự như các file cấu hình, nó vẫn hỗ trợ XML và PHP. Đặc biệt hơn, trên Symfony sẽ support thêm hai kiểu khai báo khác đó chính là Attributes (hỗ trợ từ phiên bản PHP 8) và Annotations

Ví dụ về attribute:

class LuckyController
{
    #[Route('/lucky/number')]
    public function number(): Response
    {
        // this looks exactly the same
    }
}

Ví dụ cho Annotation:

class LuckyController
{
    /**
     * @Route("/lucky/number")
     */
    public function number(): Response
    {
        // this looks exactly the same
    }
}

Về cụ thể những cái này mình nghĩ là mình sẽ có một bài viết cụ thể sau.

Symfony Form

Hứa sẽ viết mà!

Doctrine và Eloquent

Hứa sẽ viết mà!

Đăng ký nhận thông báo