【问题标题】:Laravel 8 interactive debug with Psy shell not working带有 Psy shell 的 Laravel 8 交互式调试不起作用
【发布时间】:2021-01-09 04:42:06
【问题描述】:

在 Laravel 7.x 中,我曾经通过在代码中输入 eval(\Psy\sh()); 来进行交互调试。 升级到 Laravel 8 后,它似乎不再工作了。 在 Laravel 8 中还有其他方法可以进行交互式调试吗?

【问题讨论】:

    标签: php laravel laravel-8


    【解决方案1】:

    我还没有找到合适的解决方案。所以,问题是hereartisan 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

    但是,请注意,这可能是只读环境中的问题。

    【讨论】:

      【解决方案2】:

      在使用 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 进行交互式调试。

      【讨论】:

        猜你喜欢
        • 2013-10-20
        • 1970-01-01
        • 2013-07-22
        • 1970-01-01
        • 2018-07-09
        • 2012-01-30
        • 2012-06-20
        • 2010-12-09
        • 1970-01-01
        相关资源
        最近更新 更多