簡體   English   中英

Laravel 聖所默認 model 定制

[英]Laravel Sanctum default model customization

我在 Laravel 應用程序中使用 MongoDB 作為數據庫驅動程序,使用 composer package:

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

默認情況下,Laravel 模型擴展Illuminate\Database\Eloquent\Model class。

但是當我使用MongoDB then my models must extend the Jenssegers\Mongodb\Eloquent\Model` class 而不是默認的 ZA5C95B86291EA299FCBE64458ED127402Z ZA2DEBZ1AC298

我現在如何將 Laravel Sanctum 默認擴展 model class Laravel\Sanctum\PersonalAccessToken替換為Jenssegers\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文件夾中執行此操作,但我認為這是不正確的方法。 如何正確解決這個問題?

您需要做的是創建一個自定義 PersonalAccessToken (您可以復制原始的“Laravel\Sanctum\PersonalAccessToken.php”)然后只需更改

use Illuminate\Database\Eloquent\Model

為了

use Jenssegers\Mongodb\Eloquent\Model

最后在 \Providers\AuthServiceProvider

您必須在引導中添加 function

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

    Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
}

在我的搜索中,我發現了這個 package: Laravel-Sanctum-Mongo

它可以為您服務,基本上它只是安裝

或者

步驟1:

復制此 Model \Laravel\Sanctum\PersonalAccessToken並粘貼到您的自定義 model \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);

准備好,為我工作

我還必須在vendor文件夾NewAccessToken文件中添加以下內容:

use App\Models\Sanctum\PersonalAccessToken;

根據這個問題,sanctum 僅支持擴展默認 model 並且可能不會考慮添加接口。 但是我們可以欺騙自動加載器加載我們的 class 而不是默認的。

這是如何做到的:

第 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM