Я слежу за этим обертка
У меня есть эта ошибка: Исправляемая фатальная ошибка: аргумент 1, передаваемый в XeroPHP \ Models \ Accounting \ Invoice :: setDueDate (), должен реализовывать интерфейс DateTimeInterface, заданная строка
Это мой код:
try{
$lineitem = new LineItem($this->_xi);
$lineitem->setAccountCode('200')
->setQuantity('5.400')
->setDescription('this is awesome test')
->setUnitAmount('9900.00');
$contact = new Contact($this->_xi);
$contact->setName("John Doe")
->setFirstName("John")
->setLastName("Doe")
->setEmailAddress("[email protected]")
->setContactStatus(Contact::CONTACT_STATUS_ACTIVE);$invoice = new Invoice($this->_xi);
$invoice->setType(Invoice::INVOICE_TYPE_ACCREC)
->setStatus(Invoice::INVOICE_STATUS_AUTHORISED)
->setContact($contact)
//->setDate(\DateTimeInterface::format("Y-m-d"))
->setDueDate("2018-09-09")
->setLineAmountType(Invoice::LINEAMOUNT_TYPE_EXCLUSIVE)
->addLineItem($lineitem)
->setInvoiceNumber('10')
->save();}catch ( Exception $e ){
$GLOBALS['log']->fatal('[Xero-createContact]-' . $e->getMessage());
echo $e->getMessage();
}
Когда я попытался сделать это так:
->setDueDate(\DateTimeInterface::format("Y-m-d"))
Я получил эту ошибку вместо: Неустранимая ошибка: нестатический метод DateTimeInterface :: format () не может быть вызван статически, если предположить, что $ this находится в несовместимом контексте
Это функция setDueDate, которую я вызываю:
/**
* @param \DateTimeInterface $value
* @return Invoice
*/
public function setDueDate(\DateTimeInterface $value)
{
$this->propertyUpdated('DueDate', $value);
$this->_data['DueDate'] = $value;
return $this;
}
Я действительно заблудился здесь относительно того, как я могу использовать этот DateTimeInterface и как я могу даже установить будущую дату, используя его, и как мне решить все эти ошибки.
Первая ошибка говорит о том, что ->setDueDate($date)
Метод ожидает объект, который реализует DateTimeInterface, но вы поставили только строку вместо ->setDueDate("2018-09-09")
Вторая ошибка говорит о том, что format($format)
метод не может быть вызван статически. Он ожидает шаблон форматирования и форматирует существующий объект в строку в соответствии с предоставленным шаблоном. Однако вы пытались вызывать его статически, предоставляя строку даты вместо шаблона формата — неудивительно, что это не удалось. Вам нужно createFromFormat($format, $date_string)
метод, который создает DateTime объект из строки, а не наоборот.
Решение состоит в том, чтобы создать объект, который реализует DateTimeInterface. Например DateTime или же DateTimeImmutable (то же самое, но никогда не изменяется). Я предлагаю DateTime, если вы можете изменить это значение позже.
Так что измените эту строку:
->setDueDate("2018-09-09")
к этому:
->setDueDate(\DateTime::createFromFormat('Y-m-d', "2018-09-09"))
и это должно работать как шарм.
Других решений пока нет …