logo
Published on

Điểm khác nhau giữa Laravel và Symfony

Mục lục

Symfony

Symfony là một framework mã nguồn mở được viết dựa trên ngôn ngữ PHP, khác với một framework khác đang rất nổi tiếng là Laravel thì Symfony có những điểm mạnh và điểm yếu như thế nào, hãy cùng mình tìm hiểu nhé.

Điểm chung của Laravel và Symfony

Cấu trúc MVC:

Điều dễ nhận ra nhất giữa hai framework này là chính là xây dựng ứng dụng tách các thành phần Model - View - Controller. Ở Laravel chúng ta có Blade Engine thì với Symfony là Twig

Được viết dựa trên PHP:

Tất nhiên rồi, cả hai framework này đều được viết trên PHP.

PHP Laravel Symfony
7.1 5.6 4.4
7.2 6.x 4.4, 5.4
7.3 8.x 4.4, 5.4
7.4 8.x 4.4, 5.4
8.0 9.x 4.4, 5.4, 6.0

Điểm đặc biệt của Symfony

Twig thay vì Blade

Bạn sẽ thấy giữa Twig và Blade sẽ có chút tương đồng, tuy nhiên đối với template engine, mình thực sự ấn tượng hơn bởi blade bởi có nhiều hàm tích hợp hơn, cấu trúc rõ ràng và thuận mắt hơn:

Blade:

<!DOCTYPE html>
<html>
  <head>
    <title>Welcome to Symfony!</title>
  </head>
  <body>
    <h1>{{ page_title }}</h1>

    @auth Hello {{ user.name }}! @endauth {!! ... !!}
  </body>
</html>

Twig:

<!DOCTYPE html>
<html>
  <head>
    <title>Welcome to Symfony!</title>
  </head>
  <body>
    <h1>{{ page_title }}</h1>

    {% if user.isLoggedIn %} Hello {{ user.name }}! {% endif %} {# ... #}
  </body>
</html>

Doctrine thay vì Eloquent:

Để nói rõ hơn về Doctrine, có lẽ sẽ cần một bài viết dài. Nói ngắn gọn, sử dụng Doctrine sẽ phức tạp hơn sử dụng Eloquent rất nhiều, tuy nhiên lợi ích của nó là tính chặt chẽ trong code của bạn. Ví dụ ta có một model User, và nhiệm vụ của chúng ta là tạo một User với tên lả Helio vào CSDL.

Eloquent:

class User extends Eloquent {
    protected $fillable = ['name'];
}

class UserController {
    public function createUser($name}
    {
        $user = User::create([
            'name' => $name
        ]);

        return $user->name;
    }
}

Doctrine:

class User {
    /**
    * @var string
    */
    private $name;

    public function getName()
    {
        return $this->name;
    }

    public function setName(string $name)
    {
        $this->name = $name;
    }
}

class UserController {
    public function createUser($name}
    {
        $user = new User();
        $user->setName($name);
        $entityManager->persist($user);
        $entityManager->flush();

        return $user->getName();
    }
}
Đăng ký nhận thông báo