/ / Call Modules Controller von der Anwendung Bootstrap - zend-framework, bootstrapping, zend-navigation, zend-application

Call Modules Controller von Application Bootstrap - zend-framework, bootstrapping, zend-navigation, zend-application

Ich habe eine solche Frage schon einmal gestellt, aber ich glaube, das ist anders (das war nur eine allgemeine Frage).

Ich habe Zend_Navigation implementiert.

Für Menü habe ich DB-Tabelle verwendet, um Menüelemente zu speichern, und Rekursion auf Array-s ausgeführt, um die Struktur von Menüelementen zu erhalten.

All diese Aktion findet in meinem Modul namens Menu statt. Inside Ich habe:

Menu --
Controllers --
IndexController.php
Models--
DbTable--
Menu.php
Bootstrap.php

Inside Index Controller habe ich ein function menuGenerator($menu_id)

Nach den Tutorials zu Zend_Navigation wird das Menü im Bootstrap der Anwendung initialisiert.

Meine Funktion im Bootstrap der Anwendung sieht folgendermaßen aus:

public function _initMenus() {

$menuArray = new Menu_IndexController();
$outArray = $menuArray->menuGenerator(1);

$mainmenu = new Zend_Navigation($outArray);

$this->view->navigation($mainmenu);

}

und es gibt mir einen Fehler:

Fatal error: Class "Menu_IndexController" not found in D:ServerxampphtdocsprojectapplicationBootstrap.php on line 8

Also, Irgendwelche Ideen wie soll ich es richtig machen?

P.S. Ist es möglich 2 neue Menüs gleichzeitig zu starten? für ex: Ich brauche 1. Hauptmenü 2. Fußmenü (jeder Link zu einem Artikel wäre nett)

Antworten:

0 für die Antwort № 1

Standardmäßig funktioniert der Autoloader von Zend Framework nichtAutoload-Controller werden auf die gleiche Weise wie andere Komponenten (Modelle, Helper, Formulare usw.) geladen, sodass PHP den Fehler anzeigt, dass die Klasse nicht gefunden werden kann. Der schnellste Weg, dies zu umgehen, besteht darin, den Controller explizit in Bootstrap einzubinden .php. Folgendes sollte funktionieren:

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 für die Antwort № 2

Es ist ziemlich ungewöhnlich, eine Controller-Methode zu nennen während Bootstrap, da es viele Bootstrapping-Tasks gibt, von denen Controller-Aktionen abhängen. In Ihrem Fall die Controller-Methode menuGenerator() ist eigentlich nicht ein Aktion, also wird es vermutlich kein Problem sein.

Trotzdem ist es immer noch ungewöhnlich genug, dass ich das verschieben würde menuGenerator() in eine eigene Klasse ausgliedern. Rufen Sie dann diese Operation sowohl im Bootstrap als auch in Ihrem Controller auf.