在控制器中创建菜单项并将其显示在 cakephp 3 的视图中

Creating menu item in controller and display it in view in cakephp 3

我正在控制器中创建菜单,只是想在视图中显示该菜单(在我的例子中它是一个元素)但问题是控制器正在创建的菜单部分没有附加到已经在视图中创建。我不太了解在控制器中创建 html 代码并在 Cakephp 中呈现视图。请帮助解决我的问题。我的代码片段是:

Controller Code:

     public function sub_categories($id){
        $categories = $this->Categories->find('all',array('conditions'=>array('parent IN'=>$id)))->toArray();
        $i=0;
        foreach($categories as $p_cat){
            $cat_id=$p_cat['category_id'];
            $categories[$i]['sub'] = $this->sub_categories($cat_id);
            $i++;
        }
        return $categories;       
    }


    public function get_categories()
    {
        $categories = $this->Categories->find('all',array('conditions'=>array('parent IN'=>'0')))->toArray();
        $i=0;
        foreach($categories as $p_cat){


            $categories[$i]['sub'] = $this->sub_categories($p_cat['category_id']);
            $i++;
        }

        return $categories;

    }


    public function fetch_menu($data){

    foreach($data as $menu){

        echo "<li class='dropdown menu__item'>";
        echo "<a href=# class='dropdown-toggle menu__link' data-toggle='dropdown' role='button' aria-haspopup='true' aria-expanded='false'>".$menu->category_name."<span class='caret'></span></a>";



        if(!empty($menu->sub)){

          echo "<ul class='dropdown-menu multi-column columns-3'>";
          echo "<div class='agile_inner_drop_nav_info'>"; 


            echo $this->fetch_sub_menu($menu->sub);



            echo "<div class='clearfix'></div>";
            echo "</div>";
            echo "</ul>";  
        }
        echo "</li>"; 

    }

}



public function fetch_sub_menu($sub_menu){



    foreach($sub_menu as $menu){
       echo "<div class='col-sm-3 multi-gd-img'>";
        echo "<ul class='multi-column-dropdown'>";
        echo "<li><a href='mens.html'>";
        echo $menu->category_name;
        echo "</a></li>";


     echo "</ul>";
            echo "</div>";



        if(!empty($menu->sub)){




        echo "<ul class='multi-column-dropdown'>";




echo "<li>";
echo $this->fetch_sub_menu($menu->sub);
echo "</li>";



 echo "</ul>";

    }

    }

}


   public function display()
    {

        $data = $this->get_categories();
        $menu=$this->fetch_menu($data);
         $this->set(compact('menu')); 
    }

View Code:

<li class=" menu__item"><a class="menu__link" href="#">About</a></li>

<?php 
echo $menu;
?>....

请像这样更新您的 fetch_menu 功能 在这里,我只是用变量和单引号替换了双引号,双引号替换为单引号。 return 变量

public function fetch_menu($data){
  $menu = "";
  foreach($data as $val){

    $menu.= '<li class="dropdown menu__item">';
    $menu.= '<a href="#" class="dropdown-toggle menu__link" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'.$val->category_name.'<span class="caret"></span></a>';



    if(!empty($val->sub)){

      $menu.='<ul class="dropdown-menu multi-column columns-3">';
      $menu.='<div class="agile_inner_drop_nav_info">'; 


        $menu.=$this->fetch_sub_menu($val->sub);



        $menu.='<div class="clearfix"></div>';
        $menu.='</div>';
        $menu.='</ul>';  
    }
    $menu.='</li>'; 
   }
  return $menu;
}