Cấu hình PHP/Docker
Nếu bạn đang phát triển với Symfony, cài đặt trong một docker compose và vẫn chưa sử dụng debugger, thì bài viết này dành cho bạn. Chúng tôi sẽ chỉ cho bạn cách chuẩn bị môi trường của mình để bạn không cần phải sử dụng dd() hay var_dump nữa. Một khi bạn đã trải nghiệm niềm vui của việc debug, bạn sẽ không thể từ bỏ nó, vì nó sẽ tăng cường đáng kể sự thoải mái của bạn.
Đối với bài viết này bạn cần có một ứng dụng Symfony được hỗ trợ bởi apache/php (hoặc nginx và fpm, không quan trọng) với một tệp docker-compose.yml
Bước đầu tiên là cài đặt xdebug và cấu hình môi trường PHP của bạn. Nếu bạn chưa làm điều này, đây là những mục bạn phải cài đặt trong Dockerfile của mình.
RUN pecl install xdebug-3.1.6 && docker-php-ext-enable xdebug;
Lưu ý rằng nếu bạn đang sử dụng PHP 8.1 bạn sẽ cần cài đặt phiên bản 3.2.0
RUN pecl install xdebug-3.2.0 && docker-php-ext-enable xdebug;
Cá nhân tôi, tôi cấu hình php.ini của mình trực tiếp bằng cách sao chép tệp từ quá trình xây dựng Dockerfile.
COPY php.ini /usr/local/etc/php/conf.d/app.ini
Đây là nội dung của nó, cảm thấy tự do cài đặt nó theo cách bạn muốn.
; conf/php.ini
date.timezone = Europe/Paris
opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files=20000
opcache.revalidate_freq = 0
upload_max_filesize = 16M
post_max_size = 16M
realpath_cache_size = 4096k
realpath_cache_ttl=600
display_errors = Off
display_startup_errors = Off
max_execution_time=5000
memory_limit = -1
xdebug.mode=debug,develop,trace
xdebug.idekey=docker
xdebug.start_with_request=yes
xdebug.log=/dev/stdout
xdebug.log_level=0
xdebug.client_port=9003
xdebug.client_host=host.docker.internal
Chú ý toàn bộ phần xdebug của tệp. Điều này quan trọng cho sự vận hành đúng đắn của phần còn lại của bài viết này. Chế độ cho phép chúng ta nói với xdebug những tùy chọn mà chúng ta cần.
develop: Điều này sẽ cho bạn một var_dump nâng cao trong ứng dụng của bạn nhưng cũng có thông tin bổ sung về cảnh báo, thông báo. Thông tin thêm ở đây: https://xdebug.org/docs/develop
debug: Điều này sẽ cho phép bạn sử dụng step debug, đặt điểm ngắt và đi qua mã từng dòng một.
trace: Ghi lại tất cả các lời gọi hàm, phân công biến... mọi thứ! Nó đòi hỏi nhiều nhưng không sao.
idekey: Là khóa được gửi bởi xdebug để nói với PhpStorm 'này, tôi đang debug ứng dụng này, hãy sử dụng tôi!'
client_port: Cổng mà socket kết nối phiên debug được gửi đến.
client_host: Đây là IP mà chúng ta gửi kết nối của mình cho việc khởi tạo phiên debug của chúng ta. Chúng ta đang sử dụng Docker nên chúng ta sẽ chỉ rõ cách thoát khỏi môi trường docker của chúng ta để tấn công máy chủ trên máy Linux của chúng ta.
Một khi docker của bạn ổn, bạn sẽ có điều này trong môi trường PHP của mình:


Đây là ví dụ về một docker-compose:
version: "3.8"
services:
php-7.3:
image: 'devpartitech/php:7.3-apache'
ports:
- "80:80"
volumes:
- "./:/var/www/"
extra_hosts:
- host.docker.internal:host-gateway
Không tiến hành bước tiếp theo cho đến khi bạn đã xác nhận bước này.
Cấu hình PhpStorm
Tốt! Chúng ta đã có môi trường Docker của mình được thiết lập với một trang Symfony. Chúng ta sẽ cấu hình PhpStorm để có thể nhận phiên debug.
Mở cài đặt PhpStorm.

Nếu chưa làm, hãy cài đặt plugin Symfony.
Dưới menu PHP bạn có menu Debug.

Trong menu đầu tiên chỉ định cho IDE của bạn rằng nó phải lắng nghe cổng 9003. Bạn có thể thay đổi cổng nếu bạn muốn, nhưng nó cũng cần được chỉ định trong php.ini.

Dưới menu Templates đặt liên kết đến thư mục var/cache của Symfony. Không đặt đường dẫn nằm trong container của bạn. Nó là về đường dẫn trên đĩa của bạn (máy của bạn, về phần mình Ubuntu). Không có điều này, IDE sẽ không thể sử dụng điểm ngắt trong các mẫu TWIG của bạn.
Dưới menu DBGp Proxy:

Nhớ lại khóa ide và cổng từ trước đó.
Dưới menu Servers, tạo một máy chủ mới bằng cách nhấp vào "+".


Một khi máy chủ web của bạn được chỉ định chúng ta cuối cùng có thể kiểm tra trình debug của PhpStorm!
Để kiểm tra bạn có thể đến bất kỳ Controller và mẫu nào và đặt điểm ngắt. Để làm điều này, hãy nhấp vào lề (nơi bạn có số dòng).

Nhấp vào con "bug" nhỏ ở đầu IDE của bạn

Nó sẽ chuyển sang chế độ "lắng nghe"

Làm mới trang web của bạn và bạn sẽ có quyền truy cập vào các tùy chọn debug 😊


Và đó là nó!