为什么 Laravel 中间件中的 intelephense 不能识别我的用户模型中的功能?

Why isn't intelephense in Laravel middleware recognizing the function from my User model?

我做了一个中间件,负责检查用户的权限。我在我的用户模型中实现了一个 hasPermission 函数。但是当我尝试通过 auth()->user 使用它时,出现以下错误,为什么会这样?

我在我的用户模型中实现了这个方法

public function hasPermission($permission)
{
    return in_array($this->permissions(), $permission);
}

这是中间件

<?php

namespace App\Http\Middleware;

use Closure;

class VerifyPermission
{
    public function handle($request, Closure $next, $permission)
    {
        if (auth()->check() && auth()->user()->hasPermission($permission)) {
            return $next($request);
        }
        abort(401, 'Unauthorized');
    }
}

这是因为 user() 方法有一个 return 类型的 \Illuminate\Contracts\Auth\Authenticatable|null 这是您的用户 class 实现的接口。这是因为它可能 return 不同的模型基于你使用的守卫,但它们都必须实现 Authenticatable.

我不知道全局更改此设置的简单方法,但您可以将用户保存在变量中并添加一个 phpDoc 块:

/** @var \App\User */
$user = auth()->user();

这应该会被 intelephense 获取并显示正确的方法。