Debug và sử dụng Symfony Profiler

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 9 tháng 5, 2025

Trong quá trình phát triển ứng dụng Symfony, việc debug là không thể thiếu. Symfony hỗ trợ bạn mạnh mẽ với hệ thống debug tool và Web Profiler cực kỳ chi tiết. Bài học này sẽ hướng dẫn bạn cách sử dụng thanh công cụ debug (Web Debug Toolbar), Symfony Profiler và các công cụ dòng lệnh để kiểm tra lỗi, phân tích request, truy vấn CSDL, template, service và nhiều thông tin khác một cách trực quan và hiệu quả.

1. Web Debug Toolbar (thanh công cụ ở cuối trang)

  • Tự động xuất hiện khi chạy ứng dụng ở môi trường dev.

  • Hiển thị thông tin quan trọng:

    • HTTP status code, response time
    • Route, Controller
    • Query SQL, lỗi, log
    • Request parameters, session, user

Ví dụ:

Truy cập http://localhost:8000/hello, bạn sẽ thấy thanh debug như sau:

⚪ GET /hello | 200 OK | 4.5 ms | Controller: HelloController | DB: 1 query | Twig: 1 template

Click vào thanh này → mở Web Profiler để xem chi tiết.

2. Symfony Profiler

Web Profiler là một giao diện chi tiết gồm nhiều tab giúp bạn phân tích từng phần trong request.

Tab Mô tả
Request Header, query, POST, cookie, session, attributes
Routing Route được match, controller gọi
Controller Tên controller, file định nghĩa
Twig Template render, thời gian xử lý
Doctrine Truy vấn SQL, thời gian thực thi
Events Các sự kiện được gọi trong kernel
Logs Toàn bộ log, cảnh báo, lỗi
Security Người dùng đăng nhập, role, trạng thái

3. Bật/tắt Web Profiler

Symfony chỉ bật Profiler ở môi trường dev. Cấu hình nằm tại:

# config/packages/dev/web_profiler.yaml
web_profiler:
    toolbar: true
    intercept_redirects: false

Nếu bạn không thấy thanh debug:

  • Đảm bảo bạn đang chạy ở APP_ENV=dev (file .env)
  • Kiểm tra bạn không dùng return $this->redirect(...) (do intercept_redirects mặc định là false)

4. Ghi log thủ công

Bạn có thể sử dụng service logger để ghi log trong controller hoặc service:

use Psr\Log\LoggerInterface;

public function index(LoggerInterface $logger): Response
{
    $logger->info('Truy cập trang index');
    return $this->render('home/index.html.twig');
}

Log được lưu ở:

var/log/dev.log

5. Debug các service

Symfony hỗ trợ lệnh debug mạnh mẽ:

# Liệt kê tất cả service
php bin/console debug:container

# Tìm một service cụ thể
php bin/console debug:container logger

# Xem toàn bộ biến môi trường
php bin/console debug:dotenv

Ví dụ cụ thể

Controller sử dụng logger và xem trên Profiler:

public function demo(LoggerInterface $logger): Response
{
    $logger->info('Truy cập route /demo');

    return $this->json([
        'message' => 'Debug example',
        'status' => 200
    ]);
}

Truy cập http://localhost:8000/demo rồi mở Web Profiler để:

  • Xem log vừa ghi.
  • Xem controller nào được gọi.
  • Phân tích response, request, routing.

Kết luận

Symfony Profiler là công cụ mạnh mẽ giúp bạn:

  • Hiểu rõ cách request được xử lý.
  • Dễ dàng tìm và sửa lỗi.
  • Phân tích hiệu suất của các phần trong ứng dụng.
  • Ghi log và kiểm tra truy vấn SQL, template, bảo mật…

Sử dụng thành thạo công cụ này sẽ giúp bạn phát triển ứng dụng một cách chuyên nghiệp và hiệu quả hơn. Trong bài tiếp theo, chúng ta sẽ tìm hiểu về định tuyến cơ bản và nâng cao trong Symfony.

Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ