Laravel的Auth::user()没有User模型函数的代码完成提示

10

我正在使用Laravel和PHPStorm。

自动完成适用于所有模型,但不适用于“User”,当我使用Auth::user()调用它时。

当我调用Auth::user()时,我得到了正确的用户对象,但是Auth::user()的返回类型是Authenticatable而不是User。因此,我的用户对象没有代码完成,这非常令人烦恼,因为我经常使用它。我认为问题与Auth::user()的返回类型有关,因为它是Authenticatable而不是User

config/auth.php中,我已将模型设置为app/User::class

您能告诉我如何将返回值强制转换为User模型吗?

此示例中,您可以看到该行为。


请问您能提供编辑器的名称、您为Laravel支持所做的任何配置以及您的IDE项目吗? - A. Kootstra
你在哪里调用auth::user()?尝试在HomeController中调用它。如果返回用户,则可能是在“createUser”方法中调用auth::user(),而该用户甚至不存在。 - Leo
@A.Kootstra 我正在使用PHPStorm,并且我正在使用默认配置。 - mmanuel
@Leo_Kelmendi 我在很多地方都使用它。在控制器、模型和有时候视图中。用户确实存在。问题只是用户对象的代码补全。 - mmanuel
尝试在HomeController上调用它,看看你会得到什么。 - Leo
它在所有控制器中都是相同的,包括HomeController。 - mmanuel
3个回答

3
Auth::user()   

Auth是config/app.php中ServiceProviders数组中的别名。如果您直接使用use Illuminate\Support\Facades\Auth;,则在PHPstorm和Sublime中都可以获得良好的自动完成,但这取决于IDE。


我已经在使用Illuminate\Support\Facades\Auth,但是我的用户没有代码自动完成。 - mmanuel
用户属性未完成。您的IDE不知道您在数据库中的列名是什么,因此Auth :: user() - > name无法完成。 - PULL STACK DEV
如果你在类上面的注释中添加 @property $name,那么你的属性也会自动完成。 - mmanuel
@mmanuel,请确保您在PHPstorm中拥有正确的命名空间和PSR设置。如果您的代码完全没有完成,请查找vendor文件夹中的composer文件夹,删除composer文件夹并重新启动PHPstorm。重新启动后,在终端中运行composer dump-autoload - PULL STACK DEV
我的完成功能在任何地方都可以正常工作,只是当我使用 Auth::user() 调用它时,它对我的用户不起作用。 - mmanuel

3
将laravel-ide-helper包添加到您的项目中 - https://github.com/barryvdh/laravel-ide-helper
该包会生成一个帮助文件,列出了所有Facade及其函数。它修复了Facades自动完成的问题,因此Auth::user()也被修复了。

3

我知道这篇文章是旧的,但是我仍然遇到这个问题,尽管我使用了ide-helper。

在我的Laravel应用程序中,Eloquent模型App\User被设置为/config/auth.php中的“用户提供者”:

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],

我刚刚通过运行以下命令重新生成了文件_ide_helper.phpphp artisan ide-helper:generate 现在这是我在使用 Auth()::user() 时看到的内容。

     * Get the currently authenticated user.
     *
     * @return \App\User|null \\this is desired
     * @static 
     */ 
    public static function user()
    {
                    /** @var \Illuminate\Auth\SessionGuard $instance */
                    return $instance->user();
    }

_ide_helper.php 文件中查看,我看到了这个:

enter image description here

这导致了不必要的类型提示:

enter image description here

enter image description here

最终结果是,即使使用了 ide-helper,我仍然看到了 OP 描述的完整性问题。

这里提供的解决方案解决了许多相关问题(ide-helper 包真是太棒了),但我仍然有 OP 的问题,提供的答案没有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接