[英]Laravel 5.4 sometimes|required validation not raising on “null” input
我在驗證有時僅會出現在請求中的輸入時遇到問題。
// Controller
public function update(Request $request, User $user)
{
$updateResult = $user->updateUser($request);
return dd($updateResult);
}
// User Model
protected $validation = [
'rules' => [
'email' => [
'sometimes',
'email',
'required',
],
'password' => [
'sometimes',
'min:6',
'required',
],
'first_name' => [
'sometimes',
'required',
],
'last_name' => [
'sometimes',
'required',
],
],
'messages' => [
'email.required' => 'An email is required.',
'email.email' => 'The email must be valid.',
'password.required' => 'A password is required.',
'password.min' => 'Your password must be at least six (6) characters long.',
'first_name.required' => 'Your first name is required.',
'last_name.required' => 'Your last name is required.',
],
];
public function updateUser(Request $request)
{
$validation = Validator::make($request->all(), [
$this->validation['rules'],
$this->validation['messages'],
]);
if ($validation->fails())
{
return $validation;
}
else
{
return "OK";
}
}
因此,在某些更新頁面中,$ request-> all()只會包含這些字段的子集。 但是,即使存在一個字段,但該值為null,也不會觸發必需的字段。
[
'first_name' => null,
'last_name' => 'Davidson',
'job_title' => 'Tech Support',
]
上面的請求數組將返回“ OK” ...如果有時我從字段中刪除,則當發送部分輸入請求時,它會說必須填寫字段而失敗。
我正在清除這里缺少的內容,但是通過閱讀文檔,我認為我已經正確配置了此功能:
在某些情況下,僅當輸入數組中存在該字段時,您才可能希望對該字段運行驗證檢查。 為了快速完成此任務,請將有時是規則添加到規則列表中:
$ v = Validator :: make($ data,['email'=>'sometimes | required | email',]);
您面臨的問題僅僅是由於調用驗證程序時出錯。 第二個參數不是您傳遞的多維數組。 規則數組和消息數組是單獨的參數。
$validation = Validator::make($request->all(), [
$this->validation['rules'],
$this->validation['messages'],
]);
應該換成
$validation = Validator::make($request->all(),
$this->validation['rules'], $this->validation['messages']);
在Laravel 5.4中,ConvertEmptyStringsToNull中間件將空字符串轉換為Null ...可能會導致一些問題...
您應該將nullable添加到所有可選的驗證中...
希望這可以幫助
'first_name' => [
'sometimes',
'required',
],
將永遠無法按預期工作。 有時表明:如果有事情發生,下一條規則是什么? 在這種情況下,“必需”。 需要什么? 更改為:
'first_name' => [
'sometimes',
'required',
'min:1',
],
如果未提供任何輸入且不會失敗,則null值仍將是null值。 如果要將字段的值保留在表中以進行更新,請使用其受尊重的值在表單中填充輸入。
空值被發送為''
,並被app \\ Http \\ kernel.php中間件中的ConvertEmptyStringsToNull::class
歸零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.