我正在将一个对象传递给我的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';
});
}
答案 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"
});