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);
我有一个表单,如果没有用户登录,它会显示 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);