Laravel Carbon可选参数

时间:2017-09-21 17:55:23

标签: php laravel api php-carbon

我有一个与外部API通信的函数,并希望它将可选参数作为Carbon实例传递,但API需要Y-m-d格式,所以我已经这样做了:

protected function boostsAPIRequest($token, Carbon $dateFrom = null, Carbon $dateTo = null)
{
    try {
        $boosts = $this->httpGetRequest($token,
            $this->apiURL . 'stats/api/v1.0/boosts' . '/?date_from=' . $dateFrom->format('Y-m-d') . '&date_to=' . $dateTo->format('Y-m-d'));
        //session()->put('boosts', $boosts);
    } catch (ClientException $e) {
        $this->errorHandling($e);
    }
    return $boosts ?? null;
}

这给我一个错误说

Call to a member function format() on null

如果没有传入参数,有没有办法让它保持空白?

2 个答案:

答案 0 :(得分:2)

而不是:

$dateFrom->format('Y-m-d') . '&date_to=' . $dateTo->format('Y-m-d')

使用应该使用:

($dateFrom ? $dateFrom->format('Y-m-d') : '') . '&date_to=' . ($dateTo ? $dateTo->format('Y-m-d') : '')

这是因为你无法在非对象上运行format方法(在这种情况下为null)

答案 1 :(得分:0)

你可以简单地允许将字符串值传递给函数,使用Carbon的parse()方法如下:

protected function boostsAPIRequest($token, $dateFrom = null, $dateTo = null) {
    $dateFrom = Carbon::parse($dateFrom);
   //the same with $dateTo
}

注意 Carbon知道如何将null值解析为now日期时间,以防它接收到null,因为null甚至是创建Carbon实例的大多数函数的默认值