Я передаю объект в мое приложение Laravel, которое содержит либо URL, либо буквенно-цифровой ввод, основанный на другом предоставленном параметре.Я не могу понять, как проверить значение на основе другого параметра.Например,
feeds: [
0: {source: "https://www.motorsport.com/rss/all/news/", type: "user", error: false}
1: {source: "abc-news", type: "newsapi", error: false}
2: {source: "the-verge", type: "newsapi", error: false}
]
Так что в этом случае, если type
- это пользователь, мне нужно подтвердить URL, но если это newsapi
, тогда мне нужно подтвердить с помощью регулярного выражения.
Я использую правила в Requests
для обработки этого вместе с сообщениями об ошибках, которые должны быть возвращены.Вот правила, очевидно последние 2, представляющие то, что я пытаюсь сделать, но без логики проверки типа.
return [
'name' => 'required|min:1|regex:/^[A-Za-z0-9_~\-!@#\$%\^&\(\)\s]+$/',
'feeds.*.source' => 'url',
'feeds.*.source' => 'min:1|regex:/^[A-Za-z0-9\-]+$/',
];
Ответ: Спасибо @ Али за ответ,с этой информацией я смог найти этот пост: Как иногда использовать правила в классе запросов Laravel 5 и изменить мой запрос на:
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|min:1|regex:/^[A-Za-z0-9_~\-!@#\$%\^&\(\)\s]+$/'
];
}
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->sometimes('feeds.*.source', 'url', function($data) {
return $data->type=='user';
});
$validator->sometimes('feeds.*.source', 'min:1|regex:/^[A-Za-z0-9\-]+$/', function($data) {
return $data->type=='newsapi';
});
}