如何在Laravel请求的校验规则中添加trim函数?
How to add the trim function to validation rules in Laravel Request?
我有如下所示的验证规则。我正在使用 exists 来确保合同是唯一的。现在的问题是合同号与 space 一起存储在数据库中,因此此验证不适用于这些情况(例如,它会说合同号不存在,这是由于 space数前)。为了解决这个问题,我想做 trim(contract_number)。请问如何将trim函数应用到下面的contract_number?
public function rules()
{
return [
'tel' => 'required|max:25',
'contract' => 'required|digits:9|exists:accounts,contract_number',
'nom' => 'required|max:255',
'language' => 'required|max:2',
'g-recaptcha-response' => 'required|captcha',
];
}
在 Laravel docs 中,您可以在 自定义表单请求 上使用 withValidator
方法以在 request
上添加任何进一步的验证。从列表中删除规则 exists:accounts,trim(contract_number)
,并尝试使用 after
钩子自定义规则。
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
if (!\DB::table('accounts')->whereRaw('TRIM(contract_number) = ?', [request('contract_number')])->exists()) {
$validator->errors()->add('contract_number', 'Contract number does not exists');
}
});
}
我有如下所示的验证规则。我正在使用 exists 来确保合同是唯一的。现在的问题是合同号与 space 一起存储在数据库中,因此此验证不适用于这些情况(例如,它会说合同号不存在,这是由于 space数前)。为了解决这个问题,我想做 trim(contract_number)。请问如何将trim函数应用到下面的contract_number?
public function rules()
{
return [
'tel' => 'required|max:25',
'contract' => 'required|digits:9|exists:accounts,contract_number',
'nom' => 'required|max:255',
'language' => 'required|max:2',
'g-recaptcha-response' => 'required|captcha',
];
}
在 Laravel docs 中,您可以在 自定义表单请求 上使用 withValidator
方法以在 request
上添加任何进一步的验证。从列表中删除规则 exists:accounts,trim(contract_number)
,并尝试使用 after
钩子自定义规则。
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
if (!\DB::table('accounts')->whereRaw('TRIM(contract_number) = ?', [request('contract_number')])->exists()) {
$validator->errors()->add('contract_number', 'Contract number does not exists');
}
});
}