我在Laravel应用程序`MongoDB中使用composer包作为数据库驱动程序:
https://github.com/jenssegers/laravel-mongodb
默认情况下,Laravel模型扩展IlluminateDatabaseEloquentModel
类。
但当我使用MongoDB then my models must extend the
Jenssegers\Mongodb\Eloquent\Model`类而不是默认的Laravel类时。
我现在可以如何将Laravel Sanctum默认扩展模型类LaravelSanctumPersonalAccessToken
替换为JenssegersMongodbEloquentModel
。
示例
<?php
namespace LaravelSanctum;
// use IlluminateDatabaseEloquentModel; // Replace this class
use JenssegersMongodbEloquentModel; // To this class
use LaravelSanctumContractsHasAbilities;
class PersonalAccessToken extends Model implements HasAbilities
{
// sanctum model
}
现在我可以在vendor
文件夹中这样做,但我认为这是不正确的方式。如何正确地解决这个问题?
您需要做的是创建一个自定义PersonalAccessToken(您只需复制原始的"Laravel\Ssantum\PersonalAccessToken.php"(然后只需更改
use IlluminateDatabaseEloquentModel
对于
use JenssegersMongodbEloquentModel
最后在\Providers\AuthServiceProvider 中
您必须添加引导功能
public function boot()
{
$this->registerPolicies();
Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
}
在我的搜索中,我找到了这个包:Laravel Sanctum Mongo
它可以为您服务,基本上只是安装
或
步骤1:
复制此型号LaravelSanctumPersonalAccessToken
并粘贴到您的自定义型号AppModelsSanctumPersonalAccessToken
中
步骤2:
查找use IlluminateDatabaseEloquentModel;
并替换为use JenssegersMongodbEloquentModel;
步骤3:
在AppProvidersAppServiceProvider
中添加以下内容:
// Loader Alias
$loader = AliasLoader::getInstance();
// SANCTUM CUSTOM PERSONAL-ACCESS-TOKEN
$loader->alias(LaravelSanctumPersonalAccessToken::class, AppModelsSanctumPersonalAccessToken::class);
准备好了,为我工作
我还必须在vendor
文件夹NewAccessToken
文件中添加以下内容:
use AppModelsSanctumPersonalAccessToken;
根据这个问题,santum只支持扩展默认模型,可能不会考虑添加接口。但我们可以欺骗自动加载器加载我们的类,而不是默认的类。
以下是操作方法:
步骤1:将/vendor/laravel/sanctum/src/PersonalAccessToken.php
文件复制到/app/overrides/PersonalAccessToken.php
步骤2:编辑/app/overrides/PersonalAccessToken.php
并替换use IlluminateDatabaseEloquentModel
;用CCD_ 17;
第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