碳(拉拉维尔)处理无效日期

我有一个非常简单的问题。我将该函数与 .当然,它不能返回有效的字符串,因为没有第15个月。但是我怎么能“忽略”错误消息?伟大会是这样的东西Carbon::parse($date)$date = '15.15.2015'

if (Carbon::parse($date) != error) Carbon::parse($date);
else echo 'invalid date, enduser understands the error message';

答案 1

您可以捕获 Carbon 引发的异常,如下所示:

try {
    Carbon::parse($date);
} catch (\Exception $e) {
    echo 'invalid date, enduser understands the error message';
}

后期编辑:从2020年5月13日发布的Carbon版本2.34.0开始,将引发一种新型的异常:Carbon\Exceptions\InvalidFormatException

因此,如果您使用的是较新版本的Carbon,您实际上可以更优雅地做到这一点。

try {
    Carbon::parse($date);
} catch (\Carbon\Exceptions\InvalidFormatException $e) {
    echo 'invalid date, enduser understands the error message';
}

感谢Christhofer Natalius指出这一点!


答案 2

在使用之前通过Laravel的验证。创建一个验证器,如下所示:

     protected function validator(array $data)
{
    //$data would be an associative array like ['date_value' => '15.15.2015']
    $message = [
        'date_value.date' => 'invalid date, enduser understands the error message'
    ];
    return Validator::make($data, [
        'date_value' => 'date',
    ],$message);
}

在使用日期之前打电话给他:

$this->validator(['date_value' => $date])->validate();
// $this->validator(request()->all())->validate(); you can pass the whole request if fields names are the same

Carbon::parse($date);

您可以将所有所需的字段添加到验证程序,并应用多个验证来处理每条消息或使用默认消息。如果您正在验证用户的输入,这将是一种方法


推荐