2016-08-18 10 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はinvalide値であると言います。

その後、他の問題がdataTransformerである: それは私にエラーを起動します。

は、クラスの「作成」「メイン\ CoreBundle \フォーム\ DataTransformer \ TagDataTransformer」

という名前の未定義のメソッドを呼び出そうとしました

私はuse文を追加するべきだと思いますが、私はそれを知らないと思います。 UserHasExpectationレコードを作成しているのですが、userHasExpectations-> setUser($ this-> User)を追加しないと、ライターが何を目指しているのか分かりません。

また、私は前に "vardumping" の$ this - >件名の後に追加する:

$ formMapper->取得( 'userHasExpectations') - > addModelTransformer(新しいExpectationDataTransformer(の$ this - > getSubject()、$ this-> modelManager));

...

誰かがこれで私を助けてくださいすることができNULL値のすべてのフィールドとの適切なエンティティ・オブジェクトを持っているようです。

よろしく、 Epixilog

答えて

2

は、最終的にそれを解決しよう!

ので、チュートリアルのコードはDataTransformerで「userHasExpectation」を作成しようとしているのにもかかわらず、多くの...ミス が含まれている私達はちょうど逆DataTransformerのオブジェクトuserHasExpectationを返し、その後、我々は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:これを読んで問題のチュートリアルを更新する時間があることを祈っています。

おかげで、クラス属性 'クラス' => 'UserBundle \エンティティ\の期待' を追加することソナタ3の場合 Epixilogは

0

私のための問題を解決しました。

関連する問題