首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在自定义验证规则中使用laravel的验证规则?

如何在自定义验证规则中使用laravel的验证规则?
EN

Stack Overflow用户
提问于 2017-06-28 03:52:11
回答 3查看 954关注 0票数 6

我输入了$data =['identifier' = 'xxxxxxxxxx'];,并希望将encrypt($data['identifier'])保存到表infoid列中。

在保存之前我要验证一下。规则unique:info, id在这里不合适,所以我想编写一个自定义验证规则。在自定义验证规则中,我首先encrypt()值,然后使用unique验证规则。

我知道如何编写自定义验证规则,但是如何在我的自定义验证规则中使用unique验证规则?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-04 13:24:22

规则“唯一”和“存在”使用DatabasePresenceVerifier类。所以,您不需要真正扩展唯一的规则,只需访问这个存在验证器。例如:

代码语言:javascript
复制
Validator::extend('encrypted_unique', function ($attribute, $value, $parameters, $validator) {
    list ($table, $column, $ignore_id) = $parameters; // or hard-coded if fixed
    $count = $validator->getPresenceVerifier()->getCount($table, $column, encrypt($value), $ignore_id);
    return $count === 0;
});

然后你可以像往常一样使用它:

代码语言:javascript
复制
'identifier' => "encrypted_unique:table,column,$this_id"
票数 3
EN

Stack Overflow用户

发布于 2017-06-28 07:56:45

假设您有一个验证输入的ModuleRequest,则可以在这个类中编写此方法。

代码语言:javascript
复制
protected function validationData() 
{
    $all = parent::validationData();
    $all['email'] = encrypt($all['email']);
    return $all;

}
票数 1
EN

Stack Overflow用户

发布于 2021-12-12 14:43:54

Laravel有自定义验证规则(https://laravel.com/docs/8.x/validation#using-rule-objects),例如,我有一个名为clients的表,该表使用Laravel的加密服务(https://laravel.com/docs/8.x/encryption)拥有两个唯一字段ecnrypt,而且由于它是加密的,所以无法使用唯一的验证方法指令(https://laravel.com/docs/8.x/validation#rule-unique)。这些字段是code_client和email

这就是实现自定义验证规则的原因。此服务有两种方法:传递和消息。该方法通过两个变量:$attributes (将de用于验证)和$value (获取字段的de值),并返回true或false。方法在发生故障时检索消息。

在我提到的客户机示例中,遵循下面的步骤:

  1. php :规则ValidateFieldsClients
  2. 在composer创建ValidateFieldsClients的类中,我必须声明一个方法来验证class中的字段,我使用这个方法来验证两个字段(code_client和email)。
  3. 接下来,我将完成de方法消息,以将问题检索到视图中的用户。
  4. 此外,我还声明了一个属性$field,以标识它存在错误的字段是什么
  5. 类ValidateFieldsClients示例: /*/class ValidateFieldsClients实现规则{受保护的$field;/** *创建一个新的规则实例。**@返回void */公共函数__construct() {} /**确定验证规则是否通过。** @param字符串$attribute * @param混合$value *@ foreach bool */公共函数passes($attribute,$value) { $clients = client::all();$$clients->field= $attribute;foreach ($clients as $client ){ if ($value == Crypt::$value==Crypt($client->$attribute))返回false;}返回true;} /** *获取验证错误消息。**@返回字符串*/公共函数消息(){返回字符串($this->字段)。存在,检查.‘;}
  6. 然后,为了验证,我使用表单请求验证(https://laravel.com/docs/8.x/validation#form-request-validation)
  7. php make:request ClientRequest
  8. 在最近创建的类的验证方法中: 类ClientRequest扩展FormRequest { /** *确定用户是否被授权提出此请求。**@返回bool */公共函数授权(){返回真;} /** *获取应用于请求的验证规则。**@返回数组*/公共函数规则(){返回[“代码_客户端”=‘必需’,新ValidateFieldsClients,‘电子邮件’=‘必需’,新ValidateFieldsClients,];}
  9. 最后,在控制器中: 公共函数存储库(ClientRequest $request) { $clientRequest =$$clientRequest->validated( );foreach ($clientRequest as $key => $client) { $encryptedClient$key = Crypt::encryptString($client);};客户端:create($encryptedClient+ 'idorga‘=> 1,'idcrea’=> 1,'idmodifica‘=> 1);返回重定向(‘客户/创建’)->with(‘成功’,'Registro更正‘);//返回重定向(’cuadros‘)->with(’成功‘,'Registro!’);}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44793365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档