如何在Laravel+lighthouse graphql 中实现高级验证规则?

How to implement advanced validation rules in Laravel+lighthouse graphql?

在切换到 Lighthouse 之前,我曾经有这样的验证规则:

Rule::unique('users', 'name')->where('site_id', $this->route()->parameter('site')->id)->ignore($this->route()->parameter('user')->id),

所以在检查用户名是否唯一之前,我需要 select 具有特定 site_id 的用户。现在我有以下突变:

updateUser(
    name: String! @rules(apply: ["App\Rules\UniqueUserName"])
): User! @update

但是我应该如何提供 site_idsite_id 应该被视为只读属性)以及如何在我的自定义验证规则中访问它 UniqueUserName?

可以通过扩展 ValidationDirective class.

来实现复杂的验证逻辑

然后可以在rules() 方法中编写规则,就像在laravel 标准请求验证中一样。参数可通过 $this->args['site_id'].

获得

更多信息:https://lighthouse-php.com/master/security/validation.html#validate-fields