2016-08-18 77 views
2

有人試過關於Sortable Sonata Type Model in Admin的教程。 我一直在一步一步跟蹤它,沒有遺漏任何東西(我很確定),但最後還是得不到好的結果。管理中可分類的奏鳴曲類型型號

基本上我試圖做的是:我有3個實體,文章,標籤和ArticleTag(eq至用戶,期待與UserHasExpectation教程)

似乎一切都很好,直到UserHasExpectationAdmin:

protected function configureFormFields(FormMapper $formMapper){ 
// ... 

$formMapper 
    ->add('userHasExpectations', 'sonata_type_model', array(
     'label'  => 'User\'s expectations', 
     'query'  => $this->modelManager->createQuery('UserBundle\Entity\Expectation'), 
     'required'  => false, 
     'multiple'  => true, 
     'by_reference' => false, 
     'sortable'  => true, 
    )) 
; 

$formMapper->get('userHasExpectations')->addModelTransformer(new ExpectationDataTransformer($this->getSubject(), $this->modelManager));} 

我認爲屬性'class'=>'UserBundle \ Entity \ Expectation'應該被添加到'userHasExpectations'字段中,否則Symfony會說它是無效值。

那麼其他的問題是在dataTransformer: 它推出我的錯誤:

試圖調用名爲未定義的方法類「主要\ CoreBundle \表格\ DataTransformer \ TagDataTransformer」

的「創造」

我認爲應該添加一個使用語句,但我不知道那個。更重要的是,假設我有正確的使用聲明,我不知道作者的目標是做什麼,如果它創建UserHasExpectation記錄爲什麼他不添加userHasExpectations-> setUser($ this-> User)???

此外,我想 「vardumping」 這 - $後添加>主題之前:

$ formMapper-> GET( 'userHasExpectations') - > addModelTransformer(新ExpectationDataTransformer($這個 - > getSubject(),$這 - >的ModelManager));

這似乎也與對空值的字段正確的實體對象...

有人可以幫我這個吧。

問候, Epixilog

回答

2

終於解決了IT!

因此,本教程的代碼包含了許多......錯誤 儘管試圖在DataTransformer打造「userHasExpectation」我們剛剛返回對象userHasExpectation在反向DataTransformer然後我們在postPersist和postUpdate創造我們紀錄我們的管理類那樣:

/** 
* {@inheritdoc} 
*/ 
public function postUpdate($object) 
{ 
    $position = 0; 
    $uniqId  = $this->getUniqId(); 
    $request  = $this->getRequest()->get($uniqId); 

    $qb = $this->modelManager->createQuery('MainCoreBundle:ArticleTag', 'at'); 

    $TagsToRemove = $qb->where('at.article = :article') 
         ->setParameter('article', $object) 
         ->getQuery() 
         ->getResult(); 

    foreach ($TagsToRemove as $Tag) { 
     $this->modelManager->delete($Tag); 
    } 

    foreach($request["article_tags"] as $tag) 
    { 
     $Tag = $this->modelManager->find('MainCoreBundle:Tag', $tag); 

     $article_tags = new ArticleTag; 
     $article_tags->setTag($Tag); 
     $article_tags->setArticle($object); 
     $article_tags->setPosition($position++); 

     $this->modelManager->create($article_tags); 
    } 
} 

/** 
* {@inheritdoc} 
*/ 
public function postPersist($object) 
{ 
    $position = 0; 
    $uniqId  = $this->getUniqId(); 
    $request  = $this->getRequest()->get($uniqId); 

    foreach($request["article_tags"] as $tag) 
    { 
     $Tag = $this->modelManager->find('MainCoreBundle:Tag', $tag); 

     $article_tags = new ArticleTag; 
     $article_tags->setTag($Tag); 
     $article_tags->setArticle($object); 
     $article_tags->setPosition($position++); 

     $this->modelManager->create($article_tags); 
    } 
} 

希望這會幫助有同樣的麻煩的人。 @ Sonata-admin-team:我希望你會閱讀本文,並有時間更新相關教程。

感謝, Epixilog

0

索納塔3添加類屬性 '類'=> 'UserBundle \實體\展望' 解決了這個問題對我來說。

相關問題