我正在研究Laravel应用程序,可以很好地调试我的控制器php文件,但我也喜欢调试blade.php文件。在我目前的设置中,我遵循所有的jetbrains推荐Laravel设置(https://confluence.jetbrains.com/display/PhpStorm/Laravel+Development+using+PhpStorm#LaravelDevelopmentusingPhpStorm-DebuggingLaravelApplicationswithPhpStorm),但它仍然不允许我在blade.php文件中设置断点。
我能错过什么?
放一个
<?php xdebug_break(); ?>
进入你的刀片文件工作得很好。即使在我的测试中,PHPstorm在某些情况下会跳转到下一个PHP语句。
为什么这样有效:
Laravel将刀片文件处理为缓存文件夹中的普通PHP文件。但PHP语句xdebug_break();
将被转移到那里并导致程序停止在你想要它的位置(在缓存文件中)。
要关闭这个问题 - 目前phpstorm不支持此功能。由jetbrains支持提供的解决方法是在IDE设置中将* .blade.php添加到PHP下的文件类型关联,但是,在执行此操作后它仍然不适合我。
看来他们根据我的要求创建了一张跟踪票,如果你想鼓励喷气机队就此工作请注意:qazxsw poi
即使您可以让IDE在刀片文件上启用断点,它也无法工作 - Laravel从Blade文件中编写一个PHP文件 - 这个文件最终在脚本运行时使用 - 而不是Blade文件。
解决方法
这适用于PHPStorm - 但在其他IDE中可能有类似的东西。
Laravel(5)将组合文件存储在storage / framework / views下。这些文件具有随机生成的文件名 - 因此找到所需文件可能很棘手。一种简单的方法是删除所有这些临时文件,然后刷新要调试的页面。将创建一个新文件。在PHPstorm中,您可以右键单击该文件并选择文件的扩展名类型。 (不确定其他IDE)
您现在可以设置断点。显然,您需要在Blade文件中进行更改 - 但这至少可以帮助您找出问题所在。
**更新:Alex的解决方案更容易! **
与最近的PHPstorm和Laravel 5.8一样,这应该可以立即使用。
我设计了一个更好的黑客,它允许条件调试支持,这样你就不会在XDebug_break中度过余生了。
单行扩展如下。
https://laravel-news.com/laravel-5-8-blade-template-file-path
该声明有几个不寻常的功能。
EnableForBlades是一个静态方法,用于查询环境变量(在.local.env中定义的变量之一),如果该变量的计算结果为True,则返回True。否则,它返回False,并禁止xdebug_break。