0

以下のコードでわかるように、サブナビゲーションを作成しようとしています。これを学習課題として使用しているため、バンドルを使用するのではなく、ゼロから作成したいと考えています。私はちょうどそれを割ったと思うところまで来ました。今必要なのは、subNavAction() 内の navAction() db クエリの結果にアクセスすることだけです。

「echo self::navAction($sector);」まで到達できました。完全なナビゲーションを再度エコーアウトしますが、クエリ内の個々のアイテムにアクセスできないようです。実際に行う必要があるのは、navAction() の結果をループして、子を持つすべての項目の結果を取得することです。

私はOOPHP(手続き型はよく知っていますが)とSymfony/Doctrineに本当に慣れていないので、より包括的で回答があればあるほど良いです。

//Render Navigation
public function navAction($sector)
{
    $em = $this->getDoctrine()->getManager();
    $query = $em->createQuery(
       "SELECT DISTINCT p.pageName, p.pageParent
        FROM styleGuideBundle:pages p 
        WHERE  p.pageSector LIKE :sector 
        AND p.pageType = 2"
    );
    $query->setParameter(':sector', '%'.$sector.'%');
    $navItems = $query->getResult();
    if (!$navItems) throw $this->createNotFoundException('Unable to find any pages under this category');
    return $this->render(
        'styleGuideBundle:Partial:peNav.html.twig',
        array(
            'navItems' => $navItems,
            'sector' => $sector
        )
    );
}

//Render SubNavigation
public function subnavAction($sector)
{
    echo self::navAction($sector); // This line is where I got stuck.
    $em = $this->getDoctrine()->getManager();
    $query = $em->createQuery(
       "SELECT DISTINCT p.pageName, p.pageParent
        FROM styleGuideBundle:pages p 
        WHERE  p.pageSector LIKE :sector 
        AND p.pageType = 2"
    );
    $query->setParameter(':sector', '%'.$sector.'%');
    $navItems = $query->getResult();
    if (!$navItems) throw $this->createNotFoundException('Unable to find any pages under this category');
    return $this->render(
        'styleGuideBundle:Partial:peNav.html.twig',
        array(
            'navItems' => $navItems,
            'sector' => $sector
        )
    );
}
4

1 に答える 1

1

これは最善の解決策ではありませんが、オブジェクト変数 $this->navItems; を作成できます。

PageController extends Controller {

      public $navItems = null; 

    //Render Navigation
        public function navAction($sector)
        {
            $em = $this->getDoctrine()->getManager();
            $query = $em->createQuery(
               "SELECT DISTINCT p.pageName, p.pageParent
                FROM styleGuideBundle:pages p 
                WHERE  p.pageSector LIKE :sector 
                AND p.pageType = 2"
            );
            $query->setParameter(':sector', '%'.$sector.'%');
            $this->navItems = $query->getResult();

            if (!$this->navItems) throw $this->createNotFoundException('Unable to find any pages under this category');
            return $this->render(
                'styleGuideBundle:Partial:peNav.html.twig',
                array(
                    'navItems' => $this->navItems,
                    'sector' => $sector
                )
            );
        }


        //Render SubNavigation
        public function subnavAction($sector)
        {
            $this->navAction($sector);
            var_dump($this->navItems);

            $em = $this->getDoctrine()->getManager();
            $query = $em->createQuery(
               "SELECT DISTINCT p.pageName, p.pageParent
                FROM styleGuideBundle:pages p 
                WHERE  p.pageSector LIKE :sector 
                AND p.pageType = 2"
            );
            $query->setParameter(':sector', '%'.$sector.'%');
            $navItems = $query->getResult();
            if (!$navItems) throw $this->createNotFoundException('Unable to find any pages under this category');
            return $this->render(
                'styleGuideBundle:Partial:peNav.html.twig',
                array(
                    'navItems' => $navItems,
                    'sector' => $sector
                )
            );
}
于 2013-09-09T09:35:51.343 に答える