1

Ich benutze Symfony v3.0.4, Doctrine v2.5.4 und StofDoctrineExtensionsBundle [1], um die Struktur zu verwalten.How to getPath des Gedmo Tree Elements mit symfony3, doctrine2 und stofDoctrineExtensionsBundle

Zum Einrichten der Struktur habe ich Dokumentation auf Symfony.com [2] gefolgt von documentatnion auf GitHub [3] verwendet.

Dann fuhr ich mit Baum-Setup fort - Baum-Entity aus Beispiel [4] verwendet und Code in [5] verwendet, um einen Baum zu erstellen.

Ich habe [6] und [7] nicht verwendet, da es nicht notwendig scheint (soweit ich sagen kann, dass Baum funktioniert und ohne es anzeigt). Siehe Aktualisierung.

Bisher habe ich eine Baumstruktur in der Datenbank und um sie anzuzeigen habe ich das Beispiel [8] modifiziert. Wie folgt aus:

<?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)); 
    } 
} 

wenn ich eine Zeile wie diese ändern:

'nodeDecorator' => function($node) { 
    return '<a href="/project_path/'. implode('/', getPath($node)) .'">'. $node['title'] .'</a>'; 
} 

zu erhalten, um Pfad zu jedem Element des Baumes i erhalten Fehler:

Fatal error: Call to undefined function AppBundle\Controller\getPath() 
500 Internal Server Error - FatalThrowableError 

Wie in [9] gesehen, hat NestedTreeRepository eine Methode getPath().

Update: Ich versuchte [6], schaffte es aber nicht einzurichten. Dann habe ich versucht [7] es richtig einzurichten, aber der Fehler bleibt gleich!

Bitte beraten. Vielen Dank für Ihre Zeit und Ihr Wissen.

Antwort

1

functon verwenden getPath() die

"vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Entity/Repository" in the file "NestedTreeRepository.php"

oder in

"vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Traits/Repository/ORM" in the file "NestedTreeRepositoryTrait.php"

muss man sich ändern Codeblock wie dies in

existiert:

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

Anmerkung hinzugefügt

use ($repo)

und

@implode('/', $repo->getPath($repo->findOneBy(array('id' => $node['id']))))

mit diesen - sollte es keine undefined function Fehler

1

ich hatte das gleiche Problem, daher habe ich getPathInfo() statt, und es funktionierte gut.