2017-12-23 13 views
0

私はsymfony 3プロジェクトを持っています。私は2つの日付を含むいくつかの情報を投稿しようとしています。booleanのメンバー関数format()を呼び出しますか?

/** 
* @Route("/LegoPieces") 
* @METHOD("POST") 
* @View() 
* 
* @Annotations\QueryParam(
* name="piece", nullable=false, description="piece" 
*) 
* @Annotations\QueryParam(
* name="type", nullable=false, description="type" 
*) 
* @Annotations\QueryParam(
* name="startDate", nullable=false, description="Start Date YYYY-MM-DD HH:MM:SS (Should be in the future)" 
*) 
* @Annotations\QueryParam(
* name="endDate", nullable=false, description="End Date YYYY-MM-DD HH:MM:SS (Should be no more than 3 weeks in the future)" 
*) 
*/ 
public function postAction(ParamFetcherInterface $paramFetcher) 
{ 
    $piece = $paramFetcher->get('piece'); 
    $type = $paramFetcher->get('type'); 
    $start = $paramFetcher->get('startDate'); 
    $end = $paramFetcher->get('endDate'); 
    $startDate = DateTime::createFromFormat(' Y-m-d H:i:s', $start); 
    var_dump($startDate); 
    $endDate = DateTime::createFromFormat(' Y-m-d H:i:s', $end); 


    $em = $this->getDoctrine()->getManager('default'); 

    $data = new LegoPieces(); 
    $data->setPiece($piece); 
    $data->setType($type); 
    $data->setStartDate($startDate); 
    $data->setEndDate($endDate); 
    $em->persist($data); 
    $em->flush(); 

    return new JsonResponse("LegoPieces Added Successfully", 200); 
} 

セッターは、次のようになります。:

"message": "Call to a member function format() on boolean", 
      "class": "Symfony\\Component\\Debug\\Exception\\FatalThrowableError", 

I:

 /** 
    * Set startDate 
    * 
    * @param \DateTime $startDate 
    * 
    * @return LegoPiece 
    */ 
    public function setStartDate($startDate) 
    { 
    $this->startDate = $startDate; 

    return $this; 
    } 

しかしたびに私は、次のエラーメッセージを取得したデータを投稿しようとする方法は、次のようになりますすべてを試しましたが、何もできません!あなたの助けに感謝します!

+0

投稿したコードのどこにでも 'format()'が呼び出されることはありません。エラーが発生しているのは確かですか? – Barmar

答えて

0

あなたは渡された日付をチェックする必要があります。ドキュメントが言うように問題が

DateTime::createFromFormat() 

の使用状況から、最も可能性が高いです。

が新しいDateTimeのインスタンスまたは失敗した場合にFALSEを返します。

(日付をレンダリングするときや小枝)だから、最も可能性の高い呼び出しが失敗した、(おそらくあなたのテンプレートに)後でfalseを返し、あなたは$startDateまたは$endDateformat()を呼び出すが、そのうちの一つは、実際に有効な日時ではありません - オブジェクト。

最初の空白のために、' Y-m-d H:i:s'の形式が正しくないと仮定していますか?

+0

注釈:setterでタイプヒントを使用すると、これが起こらないようにすることもできますし、以前のコードでは失敗することもあります。PHPは 'setStartDate(\ DateTime $ startDate)'にDateTimeの代わりにブール値を渡すことに気づきます。 – dbrumann

+0

こんにちは、ありがとう!空白を削除しましたが、何も変わりません。$ startDateの前に\ Datetimeを追加すると、エラーメッセージが表示されます。再度、感謝します! – Nespony

+0

'$ startDate = \ DateTime :: createFromFormat( 'Y-m-d H:i:s'、$ start);' $ start'の値は何ですか?終了日も同じですか? – dbrumann

0

@dbrumannと同じ問題だと思います。しかし、$ startDate = \ DateTime :: createFromFormat()メソッドを使用して日付を作成してみてください。関数がフォーマットから日付を作成できない場合、関数はfalseを返し、setterはdatetimeオブジェクトにfalseを設定しようとしています。

関連する問題