Laravel:php artisan 命令不是 运行,除非我注释掉一些代码

Laravel: php artisan commands not running, unless I comment some code out

当我尝试 运行 一个 make:migration 命令时,它返回了一个错误.. 试图获取 non-object 的 属性(没有更多信息)。似乎 artisan 根本没有成功执行任何命令

所以我检查了 laravel.log,它把我带到了我的自定义 html 生成器,构造中的行。

class HtmlBuilder extends \Collective\Html\HtmlBuilder {

    use CreatesAdminMenu, CreatesButtons;

    /**
     * Slugs accesible by the user
     * @var array
     */
    public $accessibleSlugs;

    function __construct()
    {
        $this->accessibleSlugs = auth()->user()->accessibleSlugs;
    }

这段代码 运行 很好,当我 dd-ed auth()->user()->accessibleSlugs 时,我也给了我一个有效的数组。但只有当我将其注释掉时,php artisan 命令 运行 再次正常...

其背后的Admin模型包含此方法

public function getAccessibleSlugsAttribute()
{
    return static::$roleSlugs[$this->role];
}

希望这里有人能给我一些指导来解决这个问题。

编辑: 如果有人仍然感兴趣...我做了更多挖掘,运行宁 ['prop'] 而不是 '->prop' 不会破坏 artisan... 为什么 :S !! 所以在我的 HtmlBuilder 的构造中:

function __construct()
{
    $this->accessibleSlugs = auth()->user()['accessibleSlugs']; //works!

    //$this->accessibleSlugs = auth()->user()->accessibleSlugs; //Break Artisan!
}

在 routeMiddleware 中,我也像这样访问它:'->accessibleSlugs',在这里它不会引起任何问题:S

auth()->user()->accessibleSlugs 在 运行 artisan 命令时不应该起作用;没有经过身份验证的用户。有一种方法真的适合你,这听起来真的很奇怪。我认为这是您调试中的一个错误;也许您是在您登录的 Web 请求的上下文中进行调试的。

完整的堆栈跟踪可能会显示您有一个 artisan 命令来实例化 HtmlBuilder。这是因为 artisan 框架在内部实例化了所有 artisan 命令,即使您没有调用它们也是如此。您应该将依赖项推迟到 handle 方法,只有在调用特定命令时才会出现。

原来的问题依然存在;您有一个使用 HtmlBuilder 的 artisan 命令,并且 HtmlBuilder 对应用程序状态(身份验证)有假设。您可能需要修改 HtmlBuilder 以支持匿名调用,或者修改 artisan 命令以接受 user-id 以模拟为参数。 (示例:php artisan do:the-thing --user-id=1337