当我尝试运行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
答案 0 :(得分:0)
auth()->user()->accessibleSlugs
不起作用;没有经过身份验证的用户。听起来它确实适合你的方式听起来很奇怪。我认为这是你的调试中的一个错误;也许您在登录的Web请求的上下文中进行了调试。
完整堆栈跟踪可能会显示您有一个工匠命令来实例化HtmlBuilder。这会导致问题,因为工匠框架在内部实例化所有工匠命令,即使它们未被您调用。您应该将依赖项推迟到handle方法,只有在调用该特定命令时才会发生它。
原始问题仍将存在;你有一个使用HtmlBuilder的工匠命令,而HtmlBuilder对应用程序状态(身份验证)有假设。您可能需要修改HtmlBuilder以支持匿名调用,或修改artisan命令以接受用户身份以模拟作为参数。 (例如:php artisan do:the-thing --user-id=1337
)