我遇到了一个情况,不幸的是不确定如何正确地解决问题。我有以下脚本
$validator = Validator::make(
$request->all(),
[
'game_id' => 'required|integer'
],
$messages
);
if ($validator->fails()) {
$response = $validator->messages();
}else{
$response = $gameService->setStatus($request);
}
现在每个游戏都有不同的类型,我想代表类型添加验证。例如,如果一个游戏是Task Based
,那么我将添加time
的验证,这仅对基于任务的游戏是强制性的,否则对于其他类型是可选的。
我有三种游戏
1-基于等级 2-基于任务 3-基于时间
在类型表中,每个游戏都有类型。
那么有什么方法可以添加验证?我想在验证功能中做到这一点。
非常感谢。
答案 0 :(得分:0)
您可以在验证之前写下您的条件。
$data = $request->all();
if ($data['game_id'] == 1) {
$rules = [
// level_based validation
];
} else if($data['game_id'] == 2) {
$rules = [
// task_based validation
];
} else {
$rules = [
// time_based validation
];
}
$validator = Validator::make($data, $rules);
希望有帮助。干杯。
答案 1 :(得分:0)
我会遵循required_if验证规则。
因此,在您的情况下,将发送两个字段,例如,类型可以是隐藏字段,然后在game_id
上添加
'game_id' => 'required_if:type,1'
等等。当然,您可以自定义错误消息。
答案 2 :(得分:0)
尝试此代码段
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class CreateGameRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
try {
$request = $this->request->all();
$rule_array = collect();
$rule1 = [
'game_id' => 'required|integer'
]
$rule_array = $rule_array->merge($rule1);
if(isset($request->task_id))
{
$rule2 = [
'task_id' => 'required|integer'
]
}
$rule_array = $rule_array->merge($rule2);
return $rule_array->all();
} catch (Exception $e) {
return $e;
}
}
public function messages(){
return [
'game_id' => 'Please select valid game',
'task_id' => 'Please select valid task'
];
}
}
然后在控制器功能中调用此请求类
use App\Http\Requests\CreateGameRequest;
public function game(CreateGameRequest $request)
{
}