1

我在我的 Laravel 应用程序 `MongoDB 中使用 composer 包作为数据库驱动程序:

https://github.com/jenssegers/laravel-mongodb

默认情况下,Laravel 模型扩展Illuminate\Database\Eloquent\Model类。

但是当我使用MongoDB then my models must extend the Jenssegers\Mongodb\Eloquent\Model` 类而不是默认的 Laravel 类时。

我现在如何将 Laravel Sanctum 默认扩展模型类替换Laravel\Sanctum\PersonalAccessTokenJenssegers\Mongodb\Eloquent\Model.

例子

<?php

namespace Laravel\Sanctum;

// use Illuminate\Database\Eloquent\Model;                      // Replace this class
use Jenssegers\Mongodb\Eloquent\Model;                          // To this class
use Laravel\Sanctum\Contracts\HasAbilities;

class PersonalAccessToken extends Model implements HasAbilities
{
    // sanctum model
}

现在我可以在vendor文件夹中执行此操作,但我认为这是不正确的方式。如何正确解决这个问题?

4

4 回答 4

1

您需要做的是创建一个自定义 PersonalAccessToken (您可以复制原始的“Laravel\Sanctum\PersonalAccessToken.php”)然后只需更改

use Illuminate\Database\Eloquent\Model

为了

use Jenssegers\Mongodb\Eloquent\Model

最后在 \Providers\AuthServiceProvider

您必须添加启动功能

public function boot()
{
    $this->registerPolicies();

    Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
}
于 2020-07-29T20:34:29.133 回答
0

在我的搜索中,我找到了这个包: Laravel-Sanctum-Mongo

它可以为您服务,基本上它只是安装

或者

步骤1:

复制此模型\Laravel\Sanctum\PersonalAccessToken并粘贴到您的自定义模型中\App\Models\Sanctum\PersonalAccessToken

第2步:

查找use Illuminate\Database\Eloquent\Model;并替换为use Jenssegers\Mongodb\Eloquent\Model;

第 3 步:

App\Providers\AppServiceProvider添加这个:

// Loader Alias
$loader = AliasLoader::getInstance();

// SANCTUM CUSTOM PERSONAL-ACCESS-TOKEN
$loader->alias(\Laravel\Sanctum\PersonalAccessToken::class, \App\Models\Sanctum\PersonalAccessToken::class);

准备好,为我工作

于 2020-10-03T09:37:59.337 回答
0

我还必须在vendor文件夹NewAccessToken文件中添加:

use App\Models\Sanctum\PersonalAccessToken;
于 2021-03-13T14:13:02.443 回答
0

根据这个问题,sanctum 仅支持扩展默认模型,可能不会考虑添加接口。但是我们可以欺骗自动加载器来加载我们的类而不是默认的类。

这是如何做到的:

第 1 步:将/vendor/laravel/sanctum/src/PersonalAccessToken.php文件复制到/app/overrides/PersonalAccessToken.php

第2步:编辑/app/overrides/PersonalAccessToken.php和替换use Illuminate\Database\Eloquent\Model;与use Jenssegers\Mongodb\Eloquent\Model;

第 3 步:编辑您的 composer.json 文件并编辑自动加载部分,如下所示:

"autoload": {
   "exclude-from-classmap": ["vendor\\laravel\\sanctum\\src\\PersonalAccessToken.php"],
   "psr-4": {
      "App\\": "app/",
      "Database\\Factories\\": "database/factories/",
      "Database\\Seeders\\": "database/seeders/",
      "Laravel\\Sanctum\\": "app/overrides/" 
   }
},

第 4 步:运行composer dump-autoload

这解决了我在 Windows 机器中的问题,但该解决方案可能不适用于不同的操作系统,因为我还没有全部尝试过。(如果这在您的操作系统中有效,请评论您的操作系统名称)

归功于https://github.com/laravel/sanctum/issues/263

于 2021-10-26T03:41:39.803 回答