2012-12-14 34 views
1

我在我的Symfony2項目中使用Gedmo Tree。Symfony2 Gedmo Tree with Translatable listner

$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表中,但是我的代碼只返回類別表中的字段。

嘗試添加listners:

$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); 

,但沒有幫助。

閱讀關於query hint,但沒有查詢使用它。

回答

1

這應該工作: 創建一個自定義NestedTreeRepository並覆蓋getNodesHierarchyQuery方法調用setHint對返回查詢

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

感謝,也沒多想重寫查詢功能。 – Narek

相關問題