【问题标题】:Undefined type Laravel\Sanctum\HasApiTokens in Laravel 8Laravel 8 中未定义的类型 Laravel\Sanctum\HasApiTokens
【发布时间】:2021-05-13 21:00:53
【问题描述】:

需要有人帮助我解决这个问题。 Laravel 圣所

我已经在本地服务器上安装了基本的默认 laravel 8++。

我听从 Laravel Sanctum 的指示。但我坚持获得 HasApiTokens

1. composer require laravel/sanctum
2. php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
3. php artisan migrate

我在我的 kernel.php 中添加如下

use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;

'api' => [
    EnsureFrontendRequestsAreStateful::class,
    'throttle:api',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],

config>auth.php 中,我将驱动程序更改为 'sanctum'

 'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'sanctum',
            'provider' => 'users',
            'hash' => false,
        ], 
    ],

这是我的 composer.json

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.3|^8.0",
        "fideloper/proxy": "^4.4",
        "fruitcake/laravel-cors": "^2.0",
        "guzzlehttp/guzzle": "^7.2",
        "laravel/framework": "^8.12",
        "laravel/passport": "^10.1",
        "laravel/sanctum": "^2.9",
        "laravel/tinker": "^2.5",
        "symfony/psr-http-message-bridge": "^2.0"
    },
    "require-dev": {
        "facade/ignition": "^2.5",
        "fakerphp/faker": "^1.9.1",
        "laravel/sail": "^1.0.1",
        "mockery/mockery": "^1.4.2",
        "nunomaduro/collision": "^5.0",
        "phpunit/phpunit": "^9.3.3"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}

但是当我尝试导入/使用 Laravel/Sanctum/HasApiTokens 时,它显示“未定义类型”。如下图

这是另一个屏幕截图。在 Laravel 之后没有任何 sanctum 目录。

【问题讨论】:

  • 你试过composer update吗?你还遇到同样的问题吗?
  • @ThânLƯƠNG ,我确实运行了作曲家更新,配置清除/缓存,作曲家转储自动加载仍然不起作用。我使用的是 php 7.4 版本。
  • 运行php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"时,有没有报错?
  • @ThânLƯƠNG,不。我没有任何错误。已成功迁移并安装。
  • 您尝试过什么调试问题? vendor/laravel/sanctum 存在吗?

标签: php laravel laravel-sanctum


【解决方案1】:

我猜SanctumServiceProvider 不会自动在您的应用程序中注册。要解决您的问题,您应该在config/app.php 中手动添加服务提供商。

'providers' => [
    //...
    Laravel\Sanctum\SanctumServiceProvider::class,
]; 

【讨论】:

  • 谢谢兄弟。在app.php中加入这一行后,我仍然无法调用app/models/user.php中的圣所。我必须关闭 Visual Studio 代码并重新打开项目,然后才能在列表中调用 sanctum。
  • 不客气。我赞成,因为你的问题很清楚。
【解决方案2】:

只需关闭并重新打开 vscode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2021-11-30
    • 2021-01-12
    • 2021-12-20
    • 2021-02-18
    • 2021-09-09
    • 2021-10-01
    相关资源
    最近更新 更多