1

ツリー構造を管理するために、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));
    }
}

次のように1行を変更すると:

'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

[9] で見られるように、NestedTreeRepositry にはメソッド getPath() があります。

更新: [6] を試しましたが、設定できませんでした。それから [7] セットアップを試みましたが、それでもエラーは同じままです!

お知らせ下さい。お時間と知識をありがとうございました。

4

2 に答える 2

1

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これで -エラーはないはずです

于 2016-05-12T18:40:18.870 に答える