2014-10-09 56 views
1

我試圖通過翻譯塞來檢索對象,像這樣的錯誤: - 我做了該方法的自定義庫Doctrine2 - 當使用@ParamConverter

1:

public function findByTranslatedSlug($slug, $locale) 
{ 
    var_dump($_locale);exit; 
    $qb = $this->createQueryBuilder('c') 
     ->where('c.slug = :slug') 
     ->setParameters($slug); 
    $query = $qb->getQuery(); 

    $query->setHint(
     \Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 
     'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker' 
     \Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE, $locale 
    ); 
    return $query->getOneOrNullResult(); 
} 

2 - 我行動被配置爲與@ParamConverter這樣的:

/** 
* @Route("/{slug}", name="name") 
* @Template() 
* @ParamConverter(
*  "content", 
*  class = "StenikContentBundle:Content", 
*  options = { 
*   "mapping" = {"_locale": "locale"}, 
*   "repository_method" = "findByTranslatedSlug" 
*  } 
* ) 
*/ 
public function indexAction($content) 
{ 
    var_dump($content->getSlug());exit; 
} 

3 - 主路由

stenik_content: 
    resource: "@StenikContentBundle/Controller/" 
    type:  annotation 
    prefix: /{_locale} 

嘗試通過xxx.localhost/app_dev.php/en/some-slug檢索對象後,我得到一個錯誤的學說:

Unable to guess how to get a Doctrine instance from the request information.

我找不到什麼導致了錯誤,或許是庫法和映射不能同時一起使用。你能幫我嗎?

回答

0

我無法直接檢查行爲,但我懷疑問題在於您已指定mapping條目中的哪些路徑佔位符與方法參數匹配,但未提供所有必需的參數(並且還在使用自定義存儲庫方法)。 Symfony通常可以猜測如何使用佔位符來查找實體,但不會出現異常情況。

編輯:在Symfony source只需確認這 - 如果mapping被設置則該實體是通過使所有的映射信息(關聯數組)插入$repository->findOneBy方法,或在repository_method命名方法檢索。這意味着您選擇的方法也需要期望關聯數組作爲其參數,而不是兩個單獨的localeslug參數。

所以,也許試試這個?:

/** 
* @Route("/{slug}", name="name") 
* @Template() 
* @ParamConverter(
*  "content", 
*  class = "StenikContentBundle:Content", 
*  options = { 
*   "mapping" = {"_locale": "locale", "slug": "slug"}, #include slug here 
*   "repository_method" = "findByTranslatedSlug" 
*  } 
* ) 
*/ 
+0

謝謝,但映射只有實體領域的文章,我想通過對TranslatableListener一個區域。有任何想法嗎? – 2014-11-13 09:16:28