/ / Aggiungi Zend_Navigation alla vista con il vecchio bootstrap legacy: php, zend-framework, zend-navigation

Aggiungi Zend_Navigation alla vista con il vecchio bootstrap legacy: php, zend-framework, zend-navigation

Ho lottato con Zend_Navigation per tutto il weekend, e ora ho un altro problema, che credo sia stato la causa di molti dei miei problemi.

Sto cercando di aggiungere Zend_Navigation a un'applicazione legacy 1.7.6 Zend Framework, ho aggiornato la libreria Zend alla versione 1.9.0 e aggiornato il bootstrap per consentire questo aggiornamento della libreria.

Il problema è che non so come, e gli esempi mostrano il nuovo metodo di bootstrap su come aggiungere l'oggetto di navigazione alla vista, ho provato questo:

//initialise the application layouts with the MVC helpers
$layout = Zend_Layout::startMvc(array("layoutPath" => "../application/layouts"));

$view = $layout->getView();
$configNav = new Zend_Config_Xml("../application/config/navigation.xml", "navigation");
$navigation = new Zend_Navigation($configNav);
$view->navigation($navigation);
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);

Questo sembra funzionare bene, ma quando vado a usare l'helper della vista breadcrumb nel mio layout, si sbaglia con: Strict Standards: creazione dell'oggetto predefinito dal valore vuoto in C: wwwmoobiadevelopmentwebsiteapplicationmodulesemployerscontrollersIndexController.php on line 27

Ciò è causato dal seguente codice nella funzione init () del mio controller.

$uri = $this->_request->getPathInfo();
$activeNav = $this->view->navigation()->findByUri($uri); <- this is null when called
$activeNav->active = true;

Credo che sia perché l'oggetto Zend_Navigation non è nella vista.

Guarderei la migrazione del bootstrap al metodo corrente, ma al momento sto esaurendo il tempo per un rilascio.

Grazie,

Concedere

risposte:

2 per risposta № 1

Per prima cosa devi capire se il tuo sospetto che Zend_Navigation non sia nella vista sia corretto. Il modo più semplice per farlo sarebbe aggiungere:

var_dump($this->view->navigation());exit;

al tuo controller init (). Questo dovrebbe restituire l'oggetto Zend_Navigation se è lì.

Se non è lì, un modo alternativo difornire l'oggetto Zend_Navigation è utilizzare il registro, che potrebbe essere più semplice. Per fare questo, rimuovi la vista dal tuo bootstrap e fai questo:

$configNav = new Zend_Config_Xml("../application/config/navigation.xml", "navigation");
$navigation = new Zend_Navigation($configNav);
Zend_Registry::set("Zend_Navigation", $navigation);

la tua roba init () del controllore rimarrà la stessa come l'oggetto vista apparirà nel registro se non ha già un oggetto Zend Navigation.

Tuttavia, non sono sicuro che il tuo controller init ()il codice funzionerà nel modo desiderato. Non credo che findByUri () funzioni sulle pagine di Mvc (ma potrei sbagliarmi) e dalla tua domanda precedente sembrava che la maggior parte delle pagine nel tuo file XML fossero quelle di Mvc. La classe Mvc ha una proprietà "href" che sembra essere l'equivalente Se il tuo file XML contiene entrambi i tipi di pagina, potresti doverli controllare entrambi, quindi ti suggerisco qualcosa del genere:

$uri = $this->_request->getPathInfo();
if (($activeNav = $this->view->navigation()->findByHref($uri)) !== null) {
$activeNav->active = true;
} else if (($activeNav = $this->view->navigation()->findByUri($uri)) !== null) {
$activeNav->active = true;
}