i using only one page for "create ads page".
How to use multiple Validation Rules for query('type')?
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',
];
}
}
How to use multiple Validation Rules for query('type')?
Inside a request class, you can access the received data by the all()
method.
$data = $this->all();
$type = isset($data['type'])? $data['type'] : null;
switch($type) {
case "text":
return [
'url' => 'required'
]
}
Note that what you return in the rules()
method is a normal PHP array that can be a merge of different arrays. You may have some rules that are regardless of this type
field.
$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);