2014-01-25 3 views
0

Sonata Admin 번들을 사용하기 시작했으며 관리 인터페이스를 만들기 위해 엔티티를 번들과 매핑하는 방법에 대한 예제를 따르고있었습니다. DateTime 클래스에 정의 된 엔티티 관리자가 없습니다.

나는 Post라는 엔티티를 생성하고이 구성 YML 파일입니다
protected function configureFormFields(FormMapper $formMapper) { 
    $formMapper->add('title', 'text') 
     ->add('published', 'checkbox', array('required' => false)) 
     ->add('publishingDate', 'sonata_type_model_hidden'); 
} 

내가 소나타에 sonata_type_model_hidden을 발견 :
Emiliano\PostsBundle\Entity\Post: 
type: entity 
table: null 
repositoryClass: Emiliano\PostsBundle\Entity\PostRepository 
id: 
    id: 
     type: integer 
     id: true 
     generator: 
      strategy: AUTO 
fields: 
    title: 
     type: string 
     column: Title 
     lenght: 100 
    published: 
     type: boolean 
     column: Published 
    publishingDate: 
     type: datetime 
     column: Publishing_Date 
     nullable: TRUE 
    lifecycleCallbacks: { } 

그런 다음 내 Admin 클래스에서 나는 configureFormFields 방법을 관리자 documentation 내가 성취하고자하는 것은 게시 날짜 (예 : 체크 박스 published이 선택된 경우에만 날짜 설정)를 프로그래밍 방식으로 처리하여 사용자에게 구현을 숨기는 것입니다. I 필드의 모든 작품을 잘 보여 주면

No entity manager defined for class DateTime 
In sonata-project/doctrine-orm-admin-bundle/Sonata/DoctrineORMAdminBundle/Model/ModelManager.php at line 214 

내가 사용하는 것도 시도 : 그것은 내가 스택 트레이스에이 메시지가 엔티티를 수정할 때, 삭제, 읽기, 작성을 위해

모든 것이 잘 작동 :

->add('publishingDate', 'hidden'); 

성공하지 못함.

여기 정확히 무슨 문제가 있습니까? 그것은 Sonata Admin이 엔티티 값으로 양식을 채우려고 시도하기 때문이며 발행 날짜는 DateTime이고 양식 사양에서 나는 sonata_type_model_hidden을 작성했기 때문입니까? 그렇다면 어떻게 이것을 피할 수 있습니까?

+0

그래서 ModelManager의 라인 214는 무엇입니까? 나는 당신이 \ DateTime 대신에 DateTime을 사용하고있을 것이라고 생각한다. 순수한 추측. – Cerad

+0

'$ em = $ this-> registry-> getManagerForClass ($ class);'그리고 나는 \ DateTime을 사용하고있다. –

+0

그런 다음 코드를 확인해보십시오. $ class = 'DateTime'을 가지고 있고 확실히 $ em이 아닐 것이기 때문입니다. – Cerad

답변

1

sonata_type_model_hidden는 설명서에 따라, 단지 hidden 필드 genereator되지 않습니다 :

sonata_type_model_hidden 숨겨진 필드를 렌더링 ModelHiddenType의 인스턴스를 사용합니다. 숨겨진 필드 값은 관련 엔터티의 식별자입니다. 나는이 문제를 이해한다면 진정한 필드 published ==가

당신은 eaxmple

public function preSave() 
{ 
    /** 
     * Check if item is published 
     */ 
    if($this->getPublished()) { 
     $this->setPublishingDate(new \DateTime()); 
    } else { 
     $this->setPublishingDate(null); 
    } 
} 

에 대한 실체 preSave/preUpdate 라이프 사이클 콜백을 사용에서 publishingDate 필드를 제거 할 수 있습니다 경우에만

는, 당신은 출판 날짜를 설정하려면 소나타 관리 양식.

+0

preSave/preUpdate 후크를 이미 사용하고 있었기 때문에 양식이 쓸모가 없어서 양식을 삭제하는 결과를 낳았습니다. –

관련 문제