Laravel:php artisan命令没有运行,除非我评论一些代码

时间:2017-09-30 10:55:16

标签: artisan laravel-5.5

当我尝试运行make:migration命令时,它返回了一个错误..试图获取非对象的属性(没有进一步的信息)。似乎工匠根本没有成功完成任何命令

所以我查看了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']而不是' - >道具'不会打破工匠......为什么:S !! 所以在我的HtmlBuilder的构造中:

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

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

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

1 个答案:

答案 0 :(得分:0)

运行artisan命令时,

auth()->user()->accessibleSlugs不起作用;没有经过身份验证的用户。听起来它确实适合你的方式听起来很奇怪。我认为这是你的调试中的一个错误;也许您在登录的Web请求的上下文中进行了调试。

完整堆栈跟踪可能会显示您有一个工匠命令来实例化HtmlBuilder。这会导致问题,因为工匠框架在内部实例化所有工匠命令,即使它们未被您调用。您应该将依赖项推迟到handle方法,只有在调用该特定命令时才会发生它。

原始问题仍将存在;你有一个使用HtmlBuilder的工匠命令,而HtmlBuilder对应用程序状态(身份验证)有假设。您可能需要修改HtmlBuilder以支持匿名调用,或修改artisan命令以接受用户身份以模拟作为参数。 (例如:php artisan do:the-thing --user-id=1337