stofdoctrineextensionsbundle - Gedmo Tree getPath Error: el nodo no está relacionado con este repositorio 500 Internal Server Error-InvalidArgumentException
symfony doctrine year (1)
Lo tengo trabajando!
Aquí están los cambios necesarios:
en lugar de
nodeDecorator'' => function($node) use ($repo)
{
return ''<a href="/project_path/''. implode(''/'', $repo->getPath($node)) .''">''. $node[''title''] .''</a>'';
}
uno debe escribir
''nodeDecorator'' => function($node) use ($repo)
{
return ''<a href="/project_path/''. @implode(''/'', $repo->getPath($repo->findOneBy(array(''id'' => $node[''id''])))) .''">''. $node[''title''] .''</a>'';
}
y en clase de categoría agregar
public function __toString()
{
return $this->getTitle();
}
Eso es todo, la ruta a cada nodo ahora debería mostrarse.
Estoy recibiendo un error:
Node is not related to this repository
500 Internal Server Error - InvalidArgumentException
ACTUALIZACIÓN 1: no importa si configuro un repositorio de árbol con rasgos o extiendo el repositorio abstracto, el error es el mismo.
ACTUALIZACIÓN 2: rastro de pila completo http://pastebin.com/TtaJnyzf
Quiero mostrar el árbol html con la estructura de árbol de la base de datos y, específicamente , necesito obtener la ruta desde la raíz hasta el nodo seleccionado . Según lo entiendo, eso se hace con la función getPath ().
Estoy usando:
- Symfony v3.0.6;
- Doctrina v2.5.4
- StofDoctrineExtensionsBundle [1]
para gestionar la estructura de árbol
Para configurar la estructura de árbol utilicé documentación en Symfony.com [2] seguido de documentación en GitHub [3], [4], [5], [6].
Hasta ahora tengo una estructura de árbol en la base de datos y obtengo un árbol html como este:
<?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));
}
}
Cambié dos líneas para mostrar la ruta desde la raíz de un elemento de árbol hasta el elemento seleccionado
nodeDecorator'' => function($node) use ($repo)
{
return ''<a href="/project_path/''. implode(''/'', $repo->getPath($node)) .''">''. $node[''title''] .''</a>'';
}
Como se ve en [7] y [8], existe la función getPath () que supone devolver una matriz de elementos de la raíz al elemento seleccionado.
Creo que el problema puede estar en este bloque de código:
$repo->getPath($node)
- [1] stofDoctrineExtensionsBundle en GitHub;
- [2] documentación de stofDoctrineExtensinsBundnle en Symfony.com;
- [3] Documentación de Gedmo Tree en GitHub;
- [4] Gedmo Tree> Tree Entity example ;
- [5] Gedmo Tree> Ejemplo de uso básico ;
- [6] Ejemplo de salida de árbol html ;
- [7] NestedTreeRepository utiliza NestedTreeRepositoryTrait
- [8] NestedTreeRepositoryTrait tiene la función "getPath ()" .
Por favor avise. Gracias por tu tiempo y conocimiento.