Проверка массива на основе значения - PullRequest
0 голосов
/ 28 октября 2018

Я передаю объект в мое приложение 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';
    });
}

1 Ответ

0 голосов
/ 28 октября 2018

Вы можете использовать иногда правило проверки для достижения желаемой функциональности.В следующем коде имя будет проверяться каждый раз, когда вы делаете запрос, и источник будет проверяться на основе типа.

   $validator = Validator::make($data, [
             'name' => 'required|min:1|regex:/^[A-Za-z0-9_~\-!@#\$%\^&\(\)\s]+$/',

             ]); 

  $validator->sometimes('feeds.*.source','url',function($input){
        return $input->type=="user"; 
    });

    $validator->sometimes('feeds.*.source','min:1|regex:/^[A-Za-z0-9\-]+$/',function($input){
        return $input->type=="newsapi"
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...