PHPstorm-无法在blade.php文件中设置断点


PHPstorm - Unable to set breakpoints in blade.php files

我正在开发Laravel应用程序,可以很好地调试我的控制器php文件,但我也想调试blade.php文件。在我目前的设置中,我遵循了所有jetbrains为Laravel推荐的设置(https://confluence.jetbrains.com/display/PhpStorm/Laravel+Development+using+PhpStorm#LaravelDevelopmentusingPhpStorm DebuggingLaravelApplicationswithPhpStork),但它仍然不允许我在blade.php文件中设置断点。

我会错过什么?

放置

<?php xdebug_break(); ?>

进入你的刀片文件工作得很好。即使在我的测试中,PHPstorm在某些情况下也会跳到下一个PHP语句。

为什么这样做:

Laravel将刀片文件处理为缓存文件夹中的普通PHP文件。但是PHP语句xdebug_break();将被传输到那里,并导致程序在您想要的位置(在缓存文件中)停止。

  1. 转到您的Jetbrains IDE设置(Ctrl+Alt+S
  2. 语言&框架>PHP>调试>Tempates
  3. 进入刀片调试>缓存路径:'path'to'app'storage'framework'views
  4. 享受

结束这个问题-phpstorm目前不支持这个功能。jetbrains支持提供的一个解决方案是在IDE设置中将*.blade.php添加到php下的文件类型关联中,然而,在这样做之后,它仍然不起作用。

他们似乎应该我的请求创建了一个youtrack票证,如果你想鼓励jetbrains在这方面工作,请投票:youtrack.getbrains.com/issue/WI-26476

即使您可以让IDE在刀片文件上启用断点,它也不会起作用-Laravel从刀片文件组成PHP文件-脚本运行时最终使用的是这个文件,而不是刀片文件。

变通办法

这适用于PHPStorm,但在其他IDE中也可能出现类似的情况。

Laravel(5)将组成的文件存储在storage/framework/views下。这些文件具有随机生成的文件名,因此可能很难找到您想要的文件。一个简单的方法是删除所有这些临时文件,然后刷新要调试的页面。将创建一个新文件。在PHPstorm中,您可以右键单击文件并选择文件的扩展名类型。(不确定其他IDE)

您现在可以设置断点了。显然,您需要在Blade文件中进行更改,但这至少可以帮助您找出问题所在。

**更新:Alex的解决方案更简单!**

我设计了一个更好的破解方法,它允许有条件的调试支持,这样你就不会永远使用XDebug_break了。

单行展开如下。

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

这句话有几个不同寻常的特点。

  1. 由于刀片文件没有use指令,因此方法名称''app''utils''DebugLogger::EnableForBlades是完全限定的
  2. 由于刀片文件似乎不支持通常的代码阻塞机制,所以一行语句没有大括号,并以分号结束

EnableForBlades是一个静态方法,用于查询环境变量(.local.env中定义的环境变量之一),如果该变量的计算结果为True,则返回True。否则,它将返回False,并且xdebug_break将被抑制。