根据值验证数组

时间:2018-10-28 13:25:19

标签: php laravel

我正在将一个对象传递给我的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中的规则来处理此问题以及返回的错误消息。这是规则,很明显,最后两个代表我要执行的操作,但是没有检查类型的逻辑。

return [
    'name' => 'required|min:1|regex:/^[A-Za-z0-9_~\-!@#\$%\^&\(\)\s]+$/',
    'feeds.*.source' => 'url',
    'feeds.*.source' => 'min:1|regex:/^[A-Za-z0-9\-]+$/',
];

答案: 感谢@Ali的回答,有了该信息,我得以找到此帖子:How to use sometimes rule in Laravel 5 request class并将我的请求更改为:

/**
* 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 :(得分:2)

您可以使用有时验证规则来实现所需的功能。在下面的代码名称将在您每次请求时进行验证,并且源将根据类型进行验证。

   $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"
    });