在我的控制器中,我有一个store
方法正在验证请求数据:
$request->validate([
'title' => 'required',
'description' => 'required',
'date' => [
'required',
new DateFormatRule
],
'closed' => 'nullable',
'time_start' => 'required_if:closed,0',
'time_end' => [
'required_if:closed,0',
new TimeDurationRule($request->time_start)
],
]);
closed
是布尔值。如果closed
为假,则需要time_start
和time_end
字段。这似乎按预期方式工作。
但是,如果我提交的要求为closed
为真,则会陷入我的自定义TimeDurationRule
:
'time_end' => [
'required_if:closed,0',
new TimeDurationRule($request->time_start)
],
如何使new TimeDurationRule($request->time_start)
有条件?例如,如果closed
为true,则我将time_end
手动设置为null
,因此time_start
/ time_end
不需要值(不需要)。
如果我评论我的自定义排除规则,那么一切都会按预期进行。
谢谢您的任何建议!
您可以将$request->closed
传递到TimeDurationRule
,然后在handle
的rule
方法中,可以执行以下操作:
class TimeDurationRule implements Rule
{
public $closed;
public function __construct(/*all needed parameters*/, $closed)
{
$this->closed = $closed;
}
public function passes($attribute, $value)
{
if(!$closed){
return true
}
// the rest of validation logic
}
}
然后是new TimeDurationRule(/*all needed parameters*/, $request->closed)
希望有帮助!