Я использую Symfony v3.0.4, Doctrine v2.5.4 и StofDoctrineExtensionsBundle [1] для управления структурой дерева.Как получить элемент элемента дерева Gedmo с помощью symfony3, doctrine2 и stofDoctrineExtensionsBundle
Чтобы настроить структуру дерева, я использовал документацию на Symfony.com [2], а затем документ на GitHub [3].
Затем я приступил к установке дерева - использовал древовидный объект из примера [4] и использовал код в [5] для создания дерева.
Я не использовал [6] и [7], поскольку это кажется не необходимым (насколько я могу сказать, что дерево работает и отображается без него).
См. Обновление.
До сих пор у меня есть древовидная структура в базе данных и для ее отображения я изменил пример [8]. Как это:
<?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));
}
}
если изменить одну строку:
'nodeDecorator' => function($node) {
return '<a href="/project_path/'. implode('/', getPath($node)) .'">'. $node['title'] .'</a>';
}
, чтобы получить путь к каждому элементу дерева я получаю ошибку:
Fatal error: Call to undefined function AppBundle\Controller\getPath()
500 Internal Server Error - FatalThrowableError
- [ 1] stofDoctrineExtensionsBundle on GitHub;
- [2] stofDoctrineExtensinsBundnle documentation on Symfony.com;
- [3] Gedmo Tree documentation on GitHub;
- [4] Gedmo Tree > Tree Entity example;
- [5] Gedmo Tree > Basic Usage Example;
- [6] DID NOT USE: Gedmo Tree > Tree Repositories;
- [7] Gedmo Tree > Use Abstract Repositories;
- [8] Tree html output example;
- [9] NestedTreeRepository has method getPath().
Как видно из [9], NestedTreeRepositry имеет метод getPath().
Обновление: я попробовал [6], но не смог его настроить. Затем я попробовал [7] настроить его нормально, но ошибка остается прежней!
Просьба сообщить. Спасибо за ваше время и знания.