2012-12-14 2 views
1

Symfony2 프로젝트에서 Gedmo Tree를 사용하고 있습니다.Symfony2 번역 가능한 listner가있는 Gedmo 트리

$em = $this->getDoctrine()->getEntityManager(); 

$options = array(
    'decorate' => true, 
    'rootOpen' => '<ul>', 
    'rootClose' => '</ul>', 
    'childOpen' => '<li>', 
    'childClose' => '</li>', 
    'nodeDecorator' => function($node) { 
     return '<a class="menu" href="#">'.$node['name'].'</a>'; 
    } 
); 


$category = $em->getRepository('MyMainBundle:Category')->childrenHierarchy(
    null, /* starting from root nodes */ 
    false, /* load all children, not only direct */ 
    $options 
); 

print_R($category); 

작동하지만 문제는 필드 이름을 번역 할 수 있다는 것입니다. 카테고리 테이블에서는 NULL이고 값은 category_translations 테이블에 저장되지만 내 코드는 카테고리 테이블에서만 필드를 반환합니다.

$evm = new \Doctrine\Common\EventManager(); 

$translatableListener = new \Gedmo\Translatable\TranslatableListener(); 
$translatableListener->setTranslatableLocale('en'); 
$evm->addEventSubscriber($translatableListener); 

변경 :와

$em = $this->getDoctrine()->getEntityManager(); 

:

$em = $this->getDoctrine()->getEntityManager(null,null,$evm); 

하지만이 도움이되지 않았다 시도

는 listners를 추가합니다.

query hint을 읽되 사용하려면 쿼리가 필요하지 않습니다. 가 사용자 정의 NestedTreeRepository를 만들고 setHint 반환 쿼리 전화 getNodesHierarchyQuery에게 메소드를 오버라이드 (override) :

답변

1

이 작동합니다.

namespace My\Bundle\Entity; 

use Doctrine\ORM\EntityRepository; 
use Gedmo\Tree\Entity\Repository\NestedTreeRepository; 

/** 
* CategoryRepository 
*/ 
class CategoryRepository extends NestedTreeRepository 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function getNodesHierarchyQuery($node = null, $direct = false, array $options = array(), $includeNode = false) 
    { 
     $query = $this->getNodesHierarchyQueryBuilder($node, $direct, $options, $includeNode)->getQuery(); 
     $query->setHint(
      \Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 
      'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker' 
     ); 
     return $query; 
    } 
} 

당신의 엔티티에 저장소를 할당하는 것을 잊지 마세요 :

namespace My\Bundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Gedmo\Mapping\Annotation as Gedmo; 

/** 
* Category 
* 
* @Gedmo\Tree(type="nested") 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="CategoryRepository") 
*/ 
class Category 
{ 
} 
+0

덕분에, 쿼리 기능을 오버라이드 (override)에 대해 생각하지 않았다. – Narek

관련 문제