Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2-尝试从同一类中的另一个方法获取属性_Php_Oop_Symfony_Doctrine_Dql - Fatal编程技术网

Php Symfony 2-尝试从同一类中的另一个方法获取属性

Php Symfony 2-尝试从同一类中的另一个方法获取属性,php,oop,symfony,doctrine,dql,Php,Oop,Symfony,Doctrine,Dql,正如您在下面的代码中看到的,我正在尝试进行子导航。我想从头开始,而不是使用捆绑包,因为我将此作为学习练习。我已经到了一个地步,我想我已经差不多把它破解了。我现在只需要访问subNavAction()内部的navAction()db查询的结果 我已经设法做到了“echo self::navAction($sector);”这会再次显示完整的导航,但我似乎无法访问查询中的单个项目。我实际上需要做的是循环遍历navAction()的结果,并获得所有包含子项的项的结果 我对OOPHP(虽然我对程序非常熟

正如您在下面的代码中看到的,我正在尝试进行子导航。我想从头开始,而不是使用捆绑包,因为我将此作为学习练习。我已经到了一个地步,我想我已经差不多把它破解了。我现在只需要访问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
        )
    );
}

这不是最好的解决方案,但您可以创建一个对象变量$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
                )
            );
}

请看,这就是我在谷歌搜索后应该做的,但它会导致以下错误:注意:未定义属性:StyleGuideBundle\Controller\PageController::$navItems in/Volumes/Projects/styleguide/site/Guidelines/src/StyleGuideBundle/Controller/PageController.php第104行只要在Controller:-->类中创建它PageController扩展控制器{$this->navItems=null;…它也不喜欢这样:“FatalErrorException:Parse:语法错误,意外的“$this”(t_变量),期望函数(t_函数)”我像这样尝试“public$navItems=null”;错误改为:“警告:为foreach()提供的参数无效”很抱歉,是这样的:public$navItems=null;现在您可以在控制器中获得$this->navItems变量。请尝试打印($this->navItems);