【发布时间】:2021-01-09 04:42:06
【问题描述】:
在 Laravel 7.x 中,我曾经通过在代码中输入 eval(\Psy\sh()); 来进行交互调试。
升级到 Laravel 8 后,它似乎不再工作了。
在 Laravel 8 中还有其他方法可以进行交互式调试吗?
【问题讨论】:
在 Laravel 7.x 中,我曾经通过在代码中输入 eval(\Psy\sh()); 来进行交互调试。
升级到 Laravel 8 后,它似乎不再工作了。
在 Laravel 8 中还有其他方法可以进行交互式调试吗?
【问题讨论】:
我还没有找到合适的解决方案。所以,问题是here。 artisan serve 的新方式是创建一个进程,当你尝试使用Psy 时它会创建一个新进程。
(standard input):198: 434 ?? 0:11.07 /usr/local/opt/php/sbin/php-fpm --nodaemonize
(standard input):406:80139 ?? 0:00.00 /usr/local/opt/php/sbin/php-fpm --nodaemonize
(standard input):407:80214 ?? 0:00.00 /usr/local/opt/php/sbin/php-fpm --nodaemonize
(standard input):419:79506 ttys000 0:13.80 nvim app/Http/Controllers/UsersController.php
(standard input):422:80288 ttys001 0:00.19 php artisan serve
(standard input):423:80292 ttys001 0:02.66 /usr/local/Cellar/php/8.0.1/bin/php -S 127.0.0.1:8000 /server.php
(standard input):424:80387 ttys001 0:00.00 (php)
(standard input):425:80436 ttys001 0:00.00 (php)
最后两个 PID 是我尝试运行的两个 Psy。
您可以看到我分叉了symfony,并将值更改为true。
这将使您再次像以前一样工作。要退出这个过程,CTRL+D。
如果版本较低,可以查看这个one
但是,请注意,这可能是只读环境中的问题。
【讨论】:
在使用 php artisan serve 运行 Laravel 时,我也遇到了同样的问题。在我运行命令的同一终端中,PsySH 断点使用eval(\Psy\sh()); 始终自动关闭。
经过反复试验,我现在能找到的唯一解决方案是通过 Laravel Tinker REPL 使用 php artisan tinker 运行请求。因此在 CLI 中,您可以使用以下代码向您创建的路由发出请求:
// The following '/foo' is the endpoint of the route you created
$request = \Illuminate\Http\Request::create('/foo', 'get');
app()->make(\Illuminate\Contracts\Http\Kernel::class)->handle($request);
然后您可以像往常一样使用 PsySH 进行交互式调试。
【讨论】: