我如何有条件地在Laravel中验证自定义规则?

问题描述 投票:0回答:1

在我的控制器中,我有一个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_starttime_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不需要值(不需要)。

如果我评论我的自定义排除规则,那么一切都会按预期进行。

谢谢您的任何建议!

laravel laravel-validation laravel-7
1个回答
0
投票

您可以将$request->closed传递到TimeDurationRule,然后在handlerule方法中,可以执行以下操作:

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)

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.