0

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

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

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

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

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. возможно ли запустить сразу два новых меню? например: 1. Главное меню 2. Меню нижнего колонтитула (любая ссылка на статью будет приятной)

ответ

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);  

} 
+0

следующее сообщение об ошибке: Catchable fatal error: Аргумент 1 передан Zend_Controller_Action :: __ construct() должен быть экземпляром Zend_Controller_Request_Abstract, не указанным в D: \ Server \ xampp \ htdocs \ project \ application \ Bootstrap.php on line 9 и определен в D: \ Server \ xampp \ htdocs \ project \ library \ Zend \ Controller \ Action.php в строке 127 – mrGott

+0

Ах да. Попробуйте создать экземпляр контроллера следующим образом: $ menuArray = new Menu_IndexController ( новый Zend_Controller_Request_Simple(), новый Zend_Controller_Response_Http() ); – Divey

0

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

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

+0

Да, я знаю, что в этом случае это не действие. Дело в том, что я вызываю модель для получения массива из БД, поэтому вы советуете мне взять ее в свою библиотеку имен и загрузить ее оттуда? – mrGott

+0

Да. Или в классе обслуживания внутри 'application/services /'. Ключ состоит в том, чтобы переместить функциональность в место, где оба бутстрапа и контроллера могут легко вызвать его. –