簡體   English   中英

Laravel 5.4有時|要求驗證不會在“空”輸入上引發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM