2016-09-09 11 views
0

を使用して、インターフェイスのDateTimeInterface、XeroなどのAPIを実装する必要があります。キャッチできる致命的なエラー:会計\納品書\ XeroPHP \モデルに渡される引数1を:: setDueDateは()インタフェースDateTimeInterfaceを実装する必要があり、文字列が請求書:: setDueDate()私は、このエラー持ってこの<a href="https://github.com/calcinai/xero-php" rel="nofollow">wrapper</a></p> <p>を、次の午前calcinai

与えられたこれは私のコードです:

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 ::フォーマットは()これは私setDueDateの関数で互換性のない文脈から

を$これを仮定して、静的にコールすることはできません。

/** 
    * @param \DateTimeInterface $value 
    * @return Invoice 
    */ 
public function setDueDate(\DateTimeInterface $value) 
    { 
     $this->propertyUpdated('DueDate', $value); 
     $this->_data['DueDate'] = $value; 
     return $this; 
    } 

私は本当に私はこのDateTimeInterfaceを使用しない方法として、ここで失われたことだし、どのように私もそれを使用して、将来の日付を設定することができ、そしてどのように私はこのすべてのエラーを解決するのです:呼び出しています。

答えて

2

最初のエラーが->setDueDate($date)方法がDateTimeInterface実装するオブジェクトを期待していること、と言うが、あなたはformat($format)メソッドは、スタティックにコールすることはできないことを、代わりに->setDueDate("2018-09-09")

秒の誤差が言うだけで文字列を供給しました。これは、フォーマットパターンを期待し、提供されたパターンに従って既存のオブジェクトを文字列にフォーマットします。しかし、それを静的に呼び出そうとしましたが、フォーマットパターンではなく日付文字列を提供しました。文字列からDateTimeオブジェクトを作成するcreateFromFormat($format, $date_string)メソッドが必要です。

解決策は、DateTimeInterfaceを実装するオブジェクトを作成することです。たとえば、DateTimeまたはDateTimeImmutable(これは同じですが、変更されることはありません)です。この値を後で変更できる場合は、DateTimeを提案します。

ので、この行を変更:これに
->setDueDate("2018-09-09")

->setDueDate(\DateTime::createFromFormat('Y-m-d', "2018-09-09"))
をし、それが魅力のように動作するはずです。

+0

他の投稿された回答はうまくいきましたが、なぜ著者がそれを削除したのか不思議です。説明してくれてありがとう、本当に助けになります。 – hungrykoala

関連する問題

 関連する問題