2017-12-23 1 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() 

의 사용량에서 가능성이 높습니다 :

새로운 날짜 시간 인스턴스 또는 실패 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를 설정하려고합니다.

관련 문제