2015-02-13 14 views
19

Tôi đang làm việc trên ứng dụng Laravel và có thể gỡ lỗi các tệp php của trình điều khiển của tôi tốt, nhưng Id cũng muốn gỡ lỗi các tệp blade.php. Với thiết lập Ive hiện tại của tôi theo sau tất cả các jetbrains đề nghị cài đặt cho Laravel, (http://bit.ly/1B64Dgx) nhưng nó vẫn không cho phép tôi thiết lập các điểm ngắt trong các tập tin blade.php.PHPstorm - Không thể đặt điểm ngắt trong các tệp blade.php

Bất kỳ ý tưởng nào về những gì tôi có thể bị thiếu?

Cảm ơn,

Don

+1

Trong tệp - tệp '.blade.php' gốc hoặc tệp lưỡi được biên dịch nào? Bạn chắc chắn không thể đặt nó trong bản gốc - bởi vì nó không được thực hiện. – LazyOne

+0

Cảm ơn bạn đã phản hồi nhanh, tôi không biết rằng nó đã được biên soạn và được tạo riêng. Có, tôi đang đề cập đến tệp blade.php gốc. Whats cách tốt nhất để gỡ lỗi các biến php trong các tập tin được biên dịch sau đó là gì? –

+1

Tôi nghĩ rằng PhpStorm có một số vấn đề với việc gỡ lỗi các tệp lưỡi được biên dịch thực tế (do cách các tệp được đặt tên và cách hoạt động của IDE: các tệp đó không có phần mở rộng và IDE không thể kết hợp chúng với loại tệp PHP. có thể đặt điểm ngắt vv). Vui lòng tham khảo vé này: https://youtrack.jetbrains.com/issue/WI-25835 – LazyOne

Trả lời

33

Đưa một

<?php xdebug_break(); ?> 

vào tập tin lưỡi của bạn hoạt động khá tốt. Ngay cả trong các thử nghiệm của tôi, PHPstorm nhảy tới câu lệnh PHP tiếp theo trong một số trường hợp.

Lý do hoạt động:

Laravel xử lý tệp lưỡi dao thành tệp PHP bình thường trong thư mục bộ nhớ cache. Nhưng câu lệnh PHP xdebug_break(); sẽ được chuyển ở đó và làm chương trình dừng ở vị trí bạn muốn (trong tệp bộ đệm).

+1

wow - tôi chỉ có một cơ hội để sử dụng nó và nó hoạt động tuyệt vời - cảm ơn Alex –

+1

Tôi thấy thủ thuật này hoạt động để gỡ lỗi các tập tin .ttml trong PHPstorm. Cảm ơn rất nhiều! – TryHarder

+0

Thủ thuật tương tự này hoạt động trong XDebug, sử dụng bất kỳ IDE nào hỗ trợ nó. Tôi đang sử dụng nó với UltraEdit Studio, mặc dù nó sẽ hoạt động trong IDE yêu thích của bạn, thậm chí ít nhất là Eclipse yêu thích của tôi. –

3

Để đóng câu hỏi này - phpstorm doesnt hỗ trợ chức năng này vào lúc này. Một công việc xung quanh được cung cấp bởi hỗ trợ jetbrains là thêm * .blade.php vào các liên kết kiểu tệp theo PHP trong các thiết lập IDE, tuy nhiên, nó vẫn không hoạt động đối với tôi sau khi thực hiện điều này.

Dường như họ đã tạo ra một vé youtrack để đáp ứng với yêu cầu của tôi, nếu youd muốn khuyến khích JetBrains để làm việc về vấn đề này xin vui lòng upvote: youtrack.jetbrains.com/issue/WI-26476

2

Thậm chí nếu bạn có thể nhận được IDE cho phép breakpoint trên các tập tin lưỡi , nó sẽ không hoạt động - Laravel soạn một tệp PHP từ tệp Blade - đó là tệp này cuối cùng được sử dụng khi tập lệnh được chạy - không phải tệp Blade.

Một Work-Khoảng

này làm việc cho PHPStorm - nhưng một cái gì đó tương tự có thể là có thể trong IDE khác.

Laravel (5) lưu trữ các tệp được soạn dưới bộ nhớ/khung/lượt xem. Những tệp này có tên tệp được tạo ngẫu nhiên - vì vậy có thể khó tìm thấy tệp bạn muốn. Cách dễ dàng là xóa tất cả các tệp tạm thời này và sau đó làm mới trang bạn muốn gỡ lỗi. Một tệp mới sẽ được tạo. Trong PHPstorm, bạn có thể nhấp chuột phải vào tệp và chọn loại tiện ích mở rộng của tệp. (Không chắc chắn về các IDE khác)

Bây giờ bạn sẽ có thể đặt điểm ngắt. Rõ ràng bạn sẽ cần phải thực hiện các thay đổi trong tệp Blade - nhưng điều này ít nhất sẽ giúp bạn tìm ra những gì là sai.

** Cập nhật: Giải pháp của Alex dễ dàng hơn! **

+0

Đặt điểm ngắt có thể không thực hiện được vì chúng không có phần mở rộng '.php'. Đó là lý do tại sao tôi đã thực hiện một yêu cầu kéo cho việc này: https://github.com/laravel/framework/pull/10462 - cũng tên tệp bộ nhớ cache không phải là ngẫu nhiên - đó là hàm băm md5 của đường dẫn tệp xem. – Alex

0

Tôi đã tạo ra một bản hack tốt hơn, cho phép hỗ trợ gỡ lỗi có điều kiện, do đó bạn không bị mắc kẹt với XDebug_break trong suốt thời gian còn lại.

Dòng đơn lẻ mở rộng như sau.

<?php if (\app\utils\DebugLogger::EnableForBlades ()) xdebug_break () ; ?> 

Tuyên bố này có một vài tính năng khác thường.

  1. Vì các tệp lưỡi đã hoàn thành không có chỉ thị, tên phương thức, \ app \ utils \ DebugLogger :: EnableForBlades hoàn toàn đủ điều kiện.
  2. Vì các tệp lưỡi có vẻ thiếu hỗ trợ cho cơ chế chặn mã thông thường, câu lệnh một dòng không có dấu ngoặc và được chấm dứt bằng dấu chấm phẩy.

EnableForBlades là phương pháp tĩnh truy vấn biến môi trường (một trong những biến được định nghĩa trong .local.env), trả về True nếu biến đó đánh giá là True. Nếu không, nó trả về False, và xdebug_break bị chặn.

Các vấn đề liên quan