PHPstorm – Es können keine Breakpoints in den blade.php-Dateien gesetzt werden

Lesezeit: 4 Minuten

Benutzer-Avatar
Don F

Ich arbeite an einer Laravel-Anwendung und kann meine Controller-PHP-Dateien problemlos debuggen, aber ich möchte auch die Blade.php-Dateien debuggen. Mit meinem aktuellen Setup habe ich alle von Jetbrains empfohlenen Einstellungen für Laravel befolgt, (https://confluence.jetbrains.com/display/PhpStorm/Laravel+Development+using+PhpStorm#LaravelDevelopmentusingPhpStorm-DebuggingLaravelApplicationswithPhpStorm), aber es erlaubt mir immer noch nicht, Haltepunkte in den blade.php-Dateien zu setzen.

Was könnte mir fehlen?

  • In welcher Datei – Original .blade.php oder kompilierte Blade-Datei? Sie können es definitiv nicht im Original festlegen – weil es nicht ausgeführt wird.

    – LazyOne

    13. Februar 2015 um 13:50 Uhr


  • Danke für die schnelle Antwort, ich wusste nicht, dass es separat kompiliert und generiert wurde. Ja, ich beziehe mich auf die ursprüngliche Blade.php-Datei. Was ist dann der beste Weg, um PHP-Variablen in den kompilierten Dateien zu debuggen?

    – Don F

    13. Februar 2015 um 13:55 Uhr


  • Ich denke, PhpStorm hat einige Probleme mit dem Debuggen tatsächlich kompilierter Blade-Dateien (aufgrund der Art und Weise, wie Dateien benannt wurden und wie IDE funktioniert: Solche Dateien haben keine Erweiterung und IDE kann sie nicht zuordnen PHP files Dateityp, um Breakpoints setzen zu können etc.). Bitte beziehen Sie sich auf dieses Ticket: youtrack.jetbrains.com/issue/WI-25835

    – LazyOne

    13. Februar 2015 um 13:58 Uhr


  • Die Blade-Syntax kann vom Debugger nicht ausgewertet werden (weil der Interpreter in Laravel implementiert ist). Während PHPStorm bis zu einem gewissen Grad Unterstützung für Blade-Templating bietet, kann es keine Breakpoints innerhalb von a platzieren blade.php Datei, es sei denn, der Code ist darin enthalten <?php ... ?>.

    – Bogdan

    13. Februar 2015 um 13:58 Uhr


  • Schau dir besser diesen an: youtrack.jetbrains.com/issue/WI-26476

    – Kootli

    13. Februar 2015 um 17:39 Uhr

Benutzer-Avatar
Alex

Ein setzen

<?php xdebug_break(); ?>

in Ihre Blade-Datei funktioniert ziemlich gut. Selbst in meinen Tests springt PHPstorm in manchen Fällen zum nächsten PHP-Statement.

Warum das funktioniert:

Laravel verarbeitet die Blade-Datei zu einer normalen PHP-Datei im Cache-Ordner. Aber die PHP-Anweisung xdebug_break(); werden dorthin übertragen und bewirken, dass das Programm an der gewünschten Position (in der Cache-Datei) anhält.

  • Wow – ich hatte gerade die Gelegenheit, das zu benutzen und es funktioniert großartig – danke Alex

    – Don F

    23. Dezember 2015 um 20:27 Uhr

  • Ich fand, dass dieser Trick auch zum Debuggen von .thtml-Dateien in PHPstorm funktioniert. Danke vielmals!

    – Versuchen Sie es härter

    24. November 2016 um 0:15 Uhr

  • Derselbe Trick funktioniert in XDebug mit jeder IDE, die ihn unterstützt. Ich verwende es mit UltraEdit Studio, obwohl es in Ihrer bevorzugten IDE funktionieren sollte, sogar in meiner am wenigsten bevorzugten Eclipse.

    – David A. Gray

    21. Dezember 2017 um 5:12 Uhr

  • So süß. Funktioniert auch in Gitpod (THEIA)! php-Datei mit einem Hash für einen Namen wird geöffnet und die gesamte Blade-Logik wird konvertiert php Stichworte. Danke @Alex!!

    – Apena

    21. Januar 2021 um 23:24 Uhr

Benutzer-Avatar
budvic

  1. Gehen Sie zu Ihren Jetbrains-IDE-Einstellungen (Strg+Alt+S; +,; etc.)
  2. Sprachen & Frameworks > PHP > Debuggen > Vorlagen
  3. Geben Sie in Blade Debug > Cache-Pfad ein: \path\to\app\storage\framework\views
  4. Genießen

Um diese Frage zu schließen – phpstorm unterstützt diese Funktionalität derzeit nicht. Eine vom Jetbrains-Support bereitgestellte Problemumgehung bestand darin, * .blade.php zu Dateitypzuordnungen unter PHP in den IDE-Einstellungen hinzuzufügen, aber es funktionierte immer noch nicht für mich, nachdem ich dies getan hatte.

Es scheint, dass sie als Antwort auf meine Anfrage ein youtrack-Ticket erstellt haben. Wenn Sie Jetbrains ermutigen möchten, daran zu arbeiten, stimmen Sie bitte hoch: youtrack.jetbrains.com/issue/WI-26476

Benutzer-Avatar
HPSeite

Selbst wenn Sie die IDE dazu bringen können, Haltepunkte für die Blade-Dateien zu aktivieren, funktioniert dies nicht – Laravel erstellt eine PHP-Datei aus der Blade-Datei – es ist diese Datei, die schließlich verwendet wird, wenn das Skript ausgeführt wird – nicht die Blade-Datei.

Eine Problemumgehung

Dies funktioniert für PHPStorm – aber etwas Ähnliches könnte in anderen IDEs möglich sein.

Laravel (5) speichert die zusammengesetzten Dateien unter storage/framework/views. Diese Dateien haben zufällig generierte Dateinamen – daher kann es schwierig sein, die gewünschte Datei zu finden. Eine einfache Möglichkeit besteht darin, alle diese temporären Dateien zu löschen und dann die Seite zu aktualisieren, die Sie debuggen möchten. Eine neue Datei wird erstellt. In PHPstorm können Sie mit der rechten Maustaste auf die Datei klicken und den Erweiterungstyp der Datei auswählen. (Bei anderen IDEs bin ich mir nicht sicher)

Sie können nun Haltepunkte setzen. Natürlich müssen Sie die Änderungen in der Blade-Datei vornehmen – aber das wird Ihnen zumindest dabei helfen, herauszufinden, was falsch ist.

**Update: Die Lösung von Alex ist einfacher! **

Ich habe mir einen noch besseren Hack ausgedacht, der bedingtes Debugging unterstützt, damit Sie nicht für den Rest der Ewigkeit mit XDebug_break stecken bleiben.

Die einzelne Zeile wird wie folgt erweitert.

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

Diese Aussage hat ein paar ungewöhnliche Merkmale.

  1. Da Blade-Dateien keine use-Direktiven haben, ist der Methodenname \app\utils\DebugLogger::EnableForBlades vollständig qualifiziert.
  2. Da Blade-Dateien anscheinend keine Unterstützung für den üblichen Codeblockierungsmechanismus haben, enthält die einzeilige Anweisung keine geschweiften Klammern und wird durch ein Semikolon abgeschlossen.

EnableForBlades ist eine statische Methode, die eine Umgebungsvariable (eine der in .local.env definierten) abfragt und „True“ zurückgibt, wenn diese Variable „True“ ergibt. Andernfalls wird False zurückgegeben und xdebug_break wird unterdrückt.

1256880cookie-checkPHPstorm – Es können keine Breakpoints in den blade.php-Dateien gesetzt werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy