我是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());
}
}
And my view:
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>";
}
}
您的选择之一是使ControllerList
成为AppController
和的组成部分在AppController
的beforeFilter
方法中设置menus
属性
的例子:
class AppController extends Controller {
var $components = array(
'ControllerList'
);
public function beforeFilter() {
$this->set('menus', $this->ControllerList->getList());
}
}
CakePHP控制器回调文档在这里
对于视图,您应该将菜单创建为一个元素,并将其包含在您的布局中。
的例子:
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