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
)
当我尝试 运行 一个 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
)