无效的用户解析器、可调用或 UserResolver FQCN 预期错误 [Laravel 审核 4.1]

问题描述 投票:0回答:2

我正在使用 Laravel 5.4 和 Laravel Auditing 4.1。我想记录 Variant 型号的价格变化,我安装了 Auditing 4.1 包。看我的代码,

config/audit.php

'implementation' => OwenIt\Auditing\Models\Audit::class,

'user' => [
    'primary_key' => 'id',
    'foreign_key' => 'variant_id',
    'model'       => App\Variant::class,
    'resolver'    => App\Variant::class,
],

应用程序/模型/Variant.php

use OwenIt\Auditing\Auditable;
use OwenIt\Auditing\Contracts\Auditable as AuditableContract;

class Variant extends BaseModel implements AuditableContract{

   use Auditable;
 --------Code here----------------
}

当我尝试将数据插入数据库时使用此代码,会出现此错误,

 UnexpectedValueException
 Invalid User resolver, callable or UserResolver FQCN expected

如何修复此错误并在

audits
表上记录我的更改?

laravel laravel-5.4 laravel-auditing
2个回答
1
投票

发生这种情况是因为您在

App\Variant::class
中配置的用于处理
User
解析的类 (config/audit.php) 未实现
OwenIt\Auditing\Contracts\UserResolver
合约。

所以,如果你真的想使用

App\Variant::class
作为你的 User 解析器类,它应该是这样的:

<?php
namespace App;

use OwenIt\Auditing\Auditable;
use OwenIt\Auditing\Contracts\Auditable as AuditableContract;

class Variant extends BaseModel implements AuditableContract, UserResolver
{
    use Auditable;

    public static function resolveId()
    {
        return Auth::check() ? Auth::user()->getAuthIdentifier() : null;
    }

    // More code here
}

如有疑问,请查看常规配置文档。


0
投票

我遇到了同样的问题并找到了解决方案:

为了解决这个问题,我创建了一个解析器并实现了以下逻辑:

<?php

namespace App\AuditResolvers;

class UserResolver  implements \OwenIt\Auditing\Contracts\UserResolver
{
    public static function resolve()
    {
        return auth()->check() ? auth()->user() : null;
    }
}

然后我配置了我的audit.php:

 'user' => [
       'morph_prefix' => 'user',
        'guards'       => [
            'web',
            'api'
        ],
       'resolver' => App\AuditResolvers\UserResolver::class,
    ],

最后,在我的模型用户中我实现了该方法:

public function getAuthIdentifier()
    {
        return auth()->user()->id;
    }

遵循文档说明: https://laravel-auditing.com/guide/audit-resolvers.html#user-resolver

© www.soinside.com 2019 - 2024. All rights reserved.