Если вы ищете "хотя бы один из" url
, phone
или email
, тогда вы хотите использовать required_without
. Это правило означает, что поле является обязательным, если любое из указанных полей отсутствует; required_without_all
означает, что это необходимо, когда все указанных полей отсутствуют.
Вы также путаете синтаксис правила, вы должны использовать либо строковый синтаксис, либо массив, либо не оба одновременно .
Возможно, вы захотите улучшить регулярное выражение своего номера телефона; + -. (000-111.9999 #8
не очень хороший номер телефона, но он пройдет проверку. Я бы посоветовал санировать ваше значение, чтобы удалить все, кроме цифр и начального +, а затем использовать лучший шаблон на том, что осталось.
И это просто косметическое изменение c, но вы можете заменить Rule::requiredIf(!request('national')),
на простое required_if
правило, похожее на другие.
При переходе на проверку запроса формы это будет выглядеть так:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreFundingsource extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Prepare the data for validation.
*
* @return void
*/
protected function prepareForValidation()
{
$phone = preg_replace("/[^0-9]/", "", $this->phone);
if (strpos($this->phone, "+") === 0) {
$phone = "+$phone";
}
$this->merge(["phone"=>$phone]);
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => ['required'],
'description' => ['required'],
'national' => ['nullable'],
'province' => ['required_if,national,'],
'categories' => ['exists:categories,id']
'url' => [
'required_without:phone,email',
'active_url'
],
'phone' => [
'required_without:url,email',
'regex:/^\+?1?[2-9][0-9]{5,14}$/'
],
'email' => [
'required_without:url,phone',
'email:rfc,dns'
],
];
}
}