仅当未注册用户时,Laravel才检查验证参数

仅当未注册用户时,Laravel才检查验证参数,laravel,laravel-5,laravel-5.8,Laravel,Laravel 5,Laravel 5.8,我有一个表单,如果没有用户登录,它会显示一个GoogleReCAPTCHA。如果有用户登录,则不显示reCaptcha 嗯 但是,当我验证这些POST参数时,我需要检查用户是否登录,以验证reCaptcha。像这样: //Check if logged in user if (Auth::check()) { $request->validate([ 'category' => 'bail|required|nu

我有一个表单,如果没有用户登录,它会显示一个GoogleReCAPTCHA。如果有用户登录,则不显示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([
“类别”=>“保释金|必需|数字”,
“标题”=>“保释金|必需|上限:160 |禁止字数”,
“价格”=>“数字”,
“说明”=>“保释金|必需|禁止使用的词语”,
“联系人姓名”=>“保释金|必需|最高限额:100”,
“联系电子邮件”=>“保释|必需|电子邮件|最多140”,
“电话”=>“保释金|必需|最高:20”,
“ad|U区域”=>“保释金|必需|数字”,
“同意”=>“需要保释”,
'g-recaptcha-response'=>Auth::check()?'''recaptcha',
]);
Laravel本身使用空字符串跳过验证规则,例如..

尝试以下操作:

$request->validate([
“类别”=>“保释金|必需|数字”,
“标题”=>“保释金|必需|上限:160 |禁止字数”,
“价格”=>“数字”,
“说明”=>“保释金|必需|禁止使用的词语”,
“联系人姓名”=>“保释金|必需|最高限额:100”,
“联系电子邮件”=>“保释|必需|电子邮件|最多140”,
“电话”=>“保释金|必需|最高:20”,
“ad|U区域”=>“保释金|必需|数字”,
“同意”=>“需要保释”,
'g-recaptcha-response'=>Auth::check()?'''recaptcha',
]);

Laravel本身使用空字符串跳过验证规则,例如,您可以先创建列表。然后,如果用户已登录,则追加recaptcha:

$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);

您可以先创建列表。然后,如果用户已登录,则追加recaptcha:

$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);

不,array_map():预期参数2是一个数组,如果是空的话,现在可以了。我更喜欢三元运算的解决方案,谢谢!不,array_map():预期参数2是一个数组,如果是空的话,现在可以了。我更喜欢三元运算的解决方案,谢谢!是,但有一个位修复:if(!Auth::check())是,但有一个位修复:if(!Auth::check())