在cakephp的所有页面中显示控制器的输出

时间:2014-05-22 18:45:16

标签: php cakephp cakephp-2.0

我是cakephp的新手。我想为我的网站建立一个菜单系统。反正有没有在整个站点显示控制器输出视图?我的控制器是这样的:

<?php
App::uses('AppController', 'Controller');

class MenusController extends AppController {

// I want to show all avilable controller in my application
public $components = array('ControllerList');

public function index() {    
        $this->set('menus', $this->ControllerList->getList());
    }    
}

我的观点:

 foreach ($dataForView['menus'] as $key => $val) {

      if ($val['name'] == 'Menus') {
            unset($val['name']);
            unset($val['actions']);
             }
      else { 
          echo '<li class="dropdown">';
          echo "<a href='#' class='dropdown-toggle' data-toggle='dropdown'>".$val['name'].'<b class="caret"></b></a>' ;

          echo '<ul class="dropdown-menu">';

        foreach ($val['actions'] as $key => $value) {
          echo '<li><a href="#">'. $value .'</a></li>';
          if ($value == 'add') {
           break;
          }
        }
    echo "</li></ul>";
    }

  }

1 个答案:

答案 0 :(得分:2)

您拥有的其中一个选项是让ControllerList成为AppControllermenus的组成部分 在beforeFilter的{​​{1}}方法中设置AppController属性。

示例:

class AppController extends Controller {

    var $components = array(
        'ControllerList'    
    );

    public function beforeFilter() {
        $this->set('menus', $this->ControllerList->getList());
    }
}

CakePHP Controller Callbacks docs here

对于视图,您应该将菜单创建为元素,并在布局中包含一次。

示例:

app/View/Element/main_menu.ctp:

foreach ($dataForView['menus'] as $key => $val) {
... // your code here
}

然后将其包含在您的布局中(例如app / View / Layouts / default.ctp)

<?php echo $this->element('main_menu'); ?>

CakePHP Element docs here