gpt4 book ai didi

php - Laravel 复杂条件验证

转载 作者:行者123 更新时间:2023-12-05 02:56:18 24 4
gpt4 key购买 nike

我正在尝试创建一个至少需要三个输入之一的验证器。

我试过了

protected function validateFundingSource (): array
{
return request()->validate([
'title' => 'required',
'description' => 'required',
'national' => 'nullable',
'province' => Rule::requiredIf(!request('national')),
'url' => [
'required_without_all:phone,email',
'active_url'
],
'phone' => [
'required_without_all:url,email|regex:/^(\+\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}(?: *#(\d+))?\s*$/im'
],
'email' => [
'required_without_all:url,phone|email:rfc,dns'
],
'categories' => 'exists:categories,id'
]);
}

但它只强制第一个字段 (url)。所以我尝试了 Complex Conditional Validation .

protected function validateFundingSource ()
{

$v = Validator::make(request()->all(), [
'title' => 'required',
'description' => 'required',
'national' => 'nullable',
'categories' => 'exists:categories,id',
]);

$v->sometimes('province', 'required', function ($input) {
return ($input->national === null) ;
});

$v->sometimes('url', 'required|active_url', function ($input) {
return (($input->phone === null) && ($input->email === null));
});

$v->sometimes('phone', 'required|regex:/^(\+\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}(?: *#(\d+))?\s*$/im', function ($input) {
return (($input->url === null) && ($input->email === null));
});

$v->sometimes('email', 'required|email:rfc,dns', function ($input) {
return (($input->url === null) && ($input->phone === null));
});

return $v;
}

但仍然没有运气......现在不再需要我可以提交所有三个空字段并且它正在工作......

有什么线索可以帮助我吗?

谢谢!

最佳答案

您的代码运行良好。您只是忘记检查验证是否通过。因为当你使用 Validator::make 时你需要手动检查它。 for request()->validate laravel 会为你做这件事。在您的 validateFundingSource () 函数中,只需在返回之前检查它是否通过验证,如下所示:

private function validateFundingSource () {
$v = Validator::make(request()->all(), [
'title' => 'required',
'description' => 'required',
'national' => 'nullable',
'categories' => 'exists:categories,id',
]);

$v->sometimes('province', 'required', function ($input) {
return ($input->national === null) ;
});

$v->sometimes('url', 'required|active_url', function ($input) {
return (($input->phone === null) && ($input->email === null));
});

$v->sometimes('phone', 'required|regex:/^(\+\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}(?: *#(\d+))?\s*$/im', function ($input) {
return (($input->url === null) && ($input->email === null));
});

$v->sometimes('email', 'required|email:rfc,dns', function ($input) {
return (($input->url === null) && ($input->phone === null));
});

// check if validae failed
if($v->fails()) {
dd('fail', $v); // do something when it failed
}
}

也很抱歉我的英语不好,希望对您有所帮助

关于php - Laravel 复杂条件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60627618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com