如何使用 symfony3、doctrine2 和 stofDoctrineExtensionsBundle 获取 Gedmo 树元素的路径
How to getPath of Gedmo Tree element using symfony3, doctrine2 and stofDoctrineExtensionsBundle
我正在使用 Symfony v3.0.4、Doctrine v2.5.4 和 StofDoctrineExtensionsBundle [1] 来管理树结构。
为了设置树结构,我使用了 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] 设置好,但错误仍然存在!
请指教。
感谢您的时间和知识。
使用
中存在的函数 getPath()
"vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Entity/Repository" in the file "NestedTreeRepository.php"
或在
"vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Traits/Repository/ORM" in the file "NestedTreeRepositoryTrait.php"
必须像这样修改代码块:
nodeDecorator' => function($node) use ($repo)
{
return '<a href="/project_path/'. @implode('/', $repo->getPath($repo->findOneBy(array('id' => $node['id'])))) .'">'. $node['title'] .'</a>';
}
已添加备注
use ($repo)
和
@implode('/', $repo->getPath($repo->findOneBy(array('id' => $node['id']))))
有了这个 - 应该没有 undefined function
错误
我遇到了同样的问题,因此我改用了 getPathInfo()
,效果很好。
我正在使用 Symfony v3.0.4、Doctrine v2.5.4 和 StofDoctrineExtensionsBundle [1] 来管理树结构。
为了设置树结构,我使用了 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] 设置好,但错误仍然存在!
请指教。 感谢您的时间和知识。
使用
中存在的函数getPath()
"vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Entity/Repository" in the file "NestedTreeRepository.php"
或在
"vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Traits/Repository/ORM" in the file "NestedTreeRepositoryTrait.php"
必须像这样修改代码块:
nodeDecorator' => function($node) use ($repo)
{
return '<a href="/project_path/'. @implode('/', $repo->getPath($repo->findOneBy(array('id' => $node['id'])))) .'">'. $node['title'] .'</a>';
}
已添加备注
use ($repo)
和
@implode('/', $repo->getPath($repo->findOneBy(array('id' => $node['id']))))
有了这个 - 应该没有 undefined function
错误
我遇到了同样的问题,因此我改用了 getPathInfo()
,效果很好。