我正在使用 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
表上记录我的更改?
发生这种情况是因为您在
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
}
如有疑问,请查看常规配置文档。
我遇到了同样的问题并找到了解决方案:
为了解决这个问题,我创建了一个解析器并实现了以下逻辑:
<?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