问题描述
我仅将一页用于“创建广告页面”。
如何对查询(“类型”)使用多个验证规则?
ads.blade.php
@if ($request->query('type') == 'text')
//fields
@elseif($request->query('type') == 'post')
//fields
@elseif($request->query('type') == 'banner')
//fields
@endif
AdsRequest.php
public function rules(Request $request)
{
//this if not work. how to resolve?
if ($request->query('type') == 'text'){
return [
'title' => ['required','max:255',Rule::unique('ads')->ignore($this->route('ad'))],'url' => 'required','type' => 'required|in:text,banner,post,sidebar','status' => 'nullable','btn' => 'nullable','pic' => 'nullable','description' => 'required',];
}
}
如何对查询(“类型”)使用多个验证规则?
解决方法
在请求类中,您可以通过all()
方法访问接收到的数据。
$data = $this->all();
$type = isset($data['type'])? $data['type'] : null;
switch($type) {
case "text":
return [
'url' => 'required'
]
}
请注意,您在rules()
方法中返回的是一个普通的PHP数组,该数组可以是不同数组的合并。您可能有一些规则,与type
字段无关。
$commonRules = [
'title' => 'required','email' => 'required|email',];
$specificRules = [];
$data = $this->all();
$type = isset($data['type'])? $data['type'] : null;
switch($type) {
case "text":
$specificRules = [
'url' => 'required',];
break;
case "foo":
$specificRules = [
'btn' => 'nullable',];
break;
}
return array_merge($commonRules,$specificRules);