Laravel 仅在未注册用户时检查验证参数

Laravel check validation parameter only if not registered user

我有一个表单,如果没有用户登录,它会显示 Google reCaptcha。如果有用户登录,则不会显示 reCaptcha。

好的。

但是当我验证那些 POST 参数时,我需要检查用户是否登录,以验证 reCaptcha 与否。像这样:

//Check if logged in user
        if (Auth::check()) {
            $request->validate([
                'category' => 'bail|required|numeric',
                'title' => 'bail|required|max:160|banned_words',
                'price' => 'numeric',
                'description' => 'bail|required|banned_words',
                'contact_name' => 'bail|required|max:100',
                'contact_email' => 'bail|required|email|max:140',
                'phone' => 'bail|required|max:20',
                'ad_region' => 'bail|required|numeric',
                "agree" => 'bail|required',
            ]);
        } else {
            $request->validate([
                'category' => 'bail|required|numeric',
                'title' => 'bail|required|max:160|banned_words',
                'price' => 'numeric',
                'description' => 'bail|required|banned_words',
                'contact_name' => 'bail|required|max:100',
                'contact_email' => 'bail|required|email|max:140',
                'phone' => 'bail|required|max:20',
                'ad_region' => 'bail|required|numeric',
                "agree" => 'bail|required',
                'g-recaptcha-response' => 'recaptcha',              //Recaptcha Google Check
            ]);
        }

那么,有没有更漂亮的内联解决方案?

试试这个:

$request->validate([
    'category' => 'bail|required|numeric',
    'title' => 'bail|required|max:160|banned_words',
    'price' => 'numeric',
    'description' => 'bail|required|banned_words',
    'contact_name' => 'bail|required|max:100',
    'contact_email' => 'bail|required|email|max:140',
    'phone' => 'bail|required|max:20',
    'ad_region' => 'bail|required|numeric',
    "agree" => 'bail|required',
    'g-recaptcha-response' => Auth::check() ? '' : 'recaptcha',
]);

Laravel 本身使用空字符串来跳过验证规则,例如check this code.

您可以先创建列表。如果用户已登录,则附加验证码:

$fields = [
                'category' => 'bail|required|numeric',
                'title' => 'bail|required|max:160|banned_words',
                'price' => 'numeric',
                'description' => 'bail|required|banned_words',
                'contact_name' => 'bail|required|max:100',
                'contact_email' => 'bail|required|email|max:140',
                'phone' => 'bail|required|max:20',
                'ad_region' => 'bail|required|numeric',
                "agree" => 'bail|required',
            ];
//Check if this is a guest user
if (!Auth::check()) {
   $fields['g-recaptcha-response'] = 'recaptcha';
}

$request->validate($fields);