0

私は取得していますエラー:Gedmoツリーある、getPathエラー:ノードは、このリポジトリ500内部サーバーエラーに関連していない - InvalidArgumentException

Node is not related to this repository 
500 Internal Server Error - InvalidArgumentException 

UPDATE 1:私は木repository with traitsまたはextend abstract repositoryエラーを設定した場合、それは問題ではありません。同じです。

UPDATE 2:フルスタックトレースhttp://pastebin.com/TtaJnyzf

私は私が選択したノードへのルートからのパスを取得する必要があり、データベースからツリー構造で出力するHTMLのツリーにしたいと、具体的。私が理解しているように、getPath()関数でそれが行われます。

私が使用しています:

  • のSymfony v3.0.6を。
  • 教義のv2.5.4
  • StofDoctrineExtensionsBundle [1]ツリー構造を管理するために

私はSymfony.com [2]のドキュメントを使い、GitHub [3]、[4]、[5]、[6]のドキュメントを使用しました。

これまでのところ私は、データベース内のツリー構造を持っていると私は、このようにHTMLのツリーを取得:

<?php 

namespace AppBundle\Controller; 

use AppBundle\Entity\Category; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 

class TreeController extends Controller 
{ 
    /** 
    * @Route("/tree", name="tree") 
    */ 
    public function treeAction(Request $request) 
    { 
     $em = $this->getDoctrine()->getManager(); 

     $repo = $em->getRepository('AppBundle:Category'); 
     $options = array(
      'decorate' => true, 
      'rootOpen' => '<ul>', 
      'rootClose' => '</ul>', 
      'childOpen' => '<li>', 
      'childClose' => '</li>', 
      nodeDecorator' => function($node) 
      { 
       return '<a href="/some_path/...">'. $node['title'] .'</a>'; 
      } 
     ); 

     $htmlTree = $repo->childrenHierarchy(
      null, /* starting from root nodes */ 
      false, /* false: load all children, true: only direct */ 
      $options 
     ); 

     return $this->render('tree/tree_show.html.twig', array('project_tree' => $htmlTree)); 
    } 
} 

私が選択した項目

にツリー要素のルートからのパスを表示するために2つの行を変更
nodeDecorator' => function($node) use ($repo) 
{ 
    return '<a href="/project_path/'. implode('/', $repo->getPath($node)) .'">'. $node['title'] .'</a>'; 
} 

[7]と[8]から分かるように、ルートから選択されたアイテムへの要素の配列を返す関数getPath()が存在します。

は私はこの問題は、このコードブロックにあるかもしれないと思う:

$repo->getPath($node) 

助言してください。 あなたの時間と知識をありがとうございます。

+0

完全なスタックトレースを表示できますか? – xabbuh

+0

@xabbuh私は自分の質問をスタックトレースで更新しました – Rikijs

答えて

0

これは機能しています。ここで

が必要な変更です:
nodeDecorator' => function($node) use ($repo) 
{ 
    return '<a href="/project_path/'. implode('/', $repo->getPath($node)) .'">'. $node['title'] .'</a>'; 
} 

1がそれをある

public function __toString() 
{ 
    return $this->getTitle(); 
} 

を追加

'nodeDecorator' => function($node) use ($repo) 
{ 
    return '<a href="/project_path/'. @implode('/', $repo->getPath($repo->findOneBy(array('id' => $node['id'])))) .'">'. $node['title'] .'</a>'; 
} 

を書くとカテゴリクラスでなければならない代わりに

、パスそれぞれの番号に今すぐ表示されるはずです。

関連する問題