我之前曾问过这样的问题,但我相信这是不同的(那只是一个普遍的问题)。
我实施了Zend_Navigation。
对于菜单,我使用DB Table存储菜单项,并在Array-s上进行递归以获取菜单项树。
所有这些操作都发生在名为Menu的模块中。在里面我有:
Menu --
Controllers --
IndexController.php
Models--
DbTable--
Menu.php
Bootstrap.php
在索引控制器内部我有一个function menuGenerator($menu_id)
因此,按照Zend_Navigation的教程,菜单在应用程序引导程序中初始化。
我在应用程序引导程序中的函数如下所示:
public function _initMenus() {
$menuArray = new Menu_IndexController();
$outArray = $menuArray->menuGenerator(1);
$mainmenu = new Zend_Navigation($outArray);
$this->view->navigation($mainmenu);
}
它给了我一个错误:
Fatal error: Class 'Menu_IndexController' not found in D:\Server\xampp\htdocs\project\application\Bootstrap.php on line 8
那么,任何想法我应该如何让它正常工作?
P.S。是否可以一次启动2个新菜单?例如:我需要1.主菜单2.页脚菜单(文章的任何链接都很好)
答案 0 :(得分:0)
默认情况下,Zend Framework的自动加载器不会像加载其他组件(模型,视图助手,表单等)那样自动加载控制器,因此PHP会抛出错误,说它找不到类。解决这个问题的最快方法是在Bootstrap.php中明确包含控制器。以下应该有效:
public function _initMenus() {
require_once('./Controllers/IndexController.php');
$menuArray = new Menu_IndexController();
$outArray = $menuArray->menuGenerator(1);
$mainmenu = new Zend_Navigation($outArray);
$this->view->navigation($mainmenu);
}
答案 1 :(得分:0)
在 Bootstrap期间调用控制器方法非常不寻常,因为控制器操作依赖于许多引导任务。在您的情况下,控制器方法menuGenerator()
实际上不是操作,因此可能不会出现问题。
尽管如此,它仍然不同寻常,我会将menuGenerator()
方法移到自己的类中。然后在Bootstrap和控制器中调用该操作。