2016-08-18 91 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 \实体\展望' 解决了这个问题对我来说。

相关问题