2014-09-28 5 views
1

두 날짜 간의 차이를 계산하는 사용자 정의 필터를 만들고 싶습니다. 나는 doc를 따라 필터 소스 작성 :symfony 2 사용자 정의 필터

public function getFilters() 
{ 
    return array(
     new \Twig_SimpleFilter('auctionLenght', array($this, 'auctionLenght')), 
    ); 
} 

public function auctionLenght($creDate,$expDate) 
{ 
    $datetime1 = new \DateTime($creDate); 
    $datetime2 = new \DateTime($expDate); 
    $interval = $datetime1->diff($datetime2); 
    $data = date('Y-m-D', $interval); 
    return $data; 
} 

public function getName() 
{ 
    return 'eforma_extension'; 
} 

가 지금은 템플릿을 사용하려면 :

{{entity.creDate |auctionLenght(entity.expDate)}} 

을하지만 오류가 모든 시간 얻을 :

예외가있다을 템플릿의 렌더링 중에 throw됩니다 ("DateTime :: _ construct()는 매개 변수 1이 문자열 인 객체가 필요합니다")

공용 함수 경매 길이 (\ DateTime $ creDate, \ DateTime $ expDate)에 \ DateTime 유형 힌트를 전달하려고했지만 작동하지 않습니다. 어떻게 수리 할 수 ​​있습니까? 간단한 문자열 필터 추가 기능이 잘 작동하기 때문에 필터가 올바르게 등록되었습니다.

답변

3

이 Doctrine ORM Entity 인 경우 이미 DateTime 개의 개체가 있고 인스턴스를 만드는 두 개의 줄을 제거하면 문제를 해결할 수 있습니다.

1

doc, 특히 this을 읽어야합니다. 예 : 답변

public function auctionLenght($creDate,$expDate) 
{ 
    $creString = $creDate->format('Y-m-d H:i:s'); 
    $expString = $expDate->format('Y-m-d H:i:s'); 

    .... 

    return $data; 
} 
+0

감사 public DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]]) 당신은 필터 기능에 문자열로 creDateexprDate 객체를 포맷하고 날짜에 전달할 수 있습니다

(string $time = "now"에 기본값) arguemtn되지 객체 .. 문자열을 수신 . 그럼 나는 엔티티에서 내 데이터를 넣었습니다. entity.creDate는 Doctrine DateTime 객체입니다. 그 변화가 어떤 생각일까요? 나는 당신의 솔루션과 재생을 시도합니다. – user2217288

+0

데이터가 Doctrine으로 가져온 데이터라면 하나의 간단한 선입니다. return $ creDate-> diff ($ expDate) -> 형식 ('% a days'); 도움을 주셔서 감사합니다 – user2217288

+0

@ user2217288 _ShonM_ 이미 귀하의 질문에 대답, Doctrine datetime 개체로 씁니다 datetime 개체로 가져옵니다 형식을 datetime으로 설정하면, 그 이유는 당신이 그들을 포맷 할 필요가 DateTime 객체에 전달, 당신은 그들을 사용할 수 있습니다 직접 .. 내 대답 +1. – xurshid29

관련 문제