Контроллер модулей вызова из приложения Bootstrap

Я задавал такой вопрос ранее, но я считаю, что это не так (этот вопрос был просто общим).

Я реализовал Zend_Navigation.

Для меню я использовал DB Table для хранения пунктов меню и сделал рекурсию на Array-s, чтобы получить дерево пунктов меню.

Все это действие происходит в моем модуле под названием Меню. Внутри у меня есть:

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

Итак, есть идеи, как мне сделать так, чтобы он работал правильно?

PS можно ли одновременно запустить 2 новых меню? например: мне нужно 1. главное меню 2. меню нижнего колонтитула (любая ссылка на статью была бы хороша)

2 ответа

Весьма необычно вызывать метод контроллера во время начальной загрузки, поскольку существует много задач начальной загрузки, от которых зависят действия контроллера. В вашем случае метод контроллера menuGenerator() на самом деле это не действие, так что, вероятно, это не будет проблемой.

Тем не менее, это все еще достаточно необычно, что я бы переместить menuGenerator() метод в свой собственный класс. Затем вызовите эту операцию как в Bootstrap, так и в вашем контроллере.

По умолчанию автозагрузчик 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);     

}
Другие вопросы по тегам