2010-04-02 1 views
1

Я все время борется с Zend_Navigation на всех выходных, и теперь у меня есть еще одна проблема, которая, по моему мнению, явилась причиной многих моих проблем.Добавить Zend_Navigation к представлению со старым устаревшим загрузочным модулем

Я пытаюсь добавить Zend_Navigation к устаревшему приложению 1.7.6 Zend Framework, я обновил библиотеку Zend до 1.9.0 и обновил загрузку, чтобы это обновление библиотеки.

Проблема заключается в том, что я не знаю, как и примеры показывают новый метод начальной загрузки, как добавить объект навигации к представлению, я попытался это:

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

Это кажется пройдите через штраф, но когда я перехожу к использованию помощника просмотра палитры в моем макете, это ошибки с: Строгие стандарты: создание объекта по умолчанию из пустого значения в C: \ www \ moobia \ development \ website \ application \ modules \ работодатели \ контроллеры \ IndexController.php в строке 27

Это вызвано следующим кодом в init () функции моего контроллера.

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

Я считаю, что это связано с тем, что объект Zend_Navigation отсутствует в представлении.

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

Спасибо,

Гранта

ответ

2

Сначала вам нужно выработать ли ваше подозрение, что Zend_Navigation не с точкой зрения правильно. Самый простой способ сделать это - добавить:

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

Вашему контроллеру init(). Это должно вернуть объект Zend_Navigation, если он есть.

Если этого нет, альтернативный способ доставки объекта Zend_Navigation - использовать реестр, что может быть проще. Для этого вы удалите вид вещи из вашей начальной загрузки и просто сделать это:

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

ваш контроллер Init() материал будет оставаться такой же, как объект вида будет выглядеть в реестре, если это не уже имеют объект Zend Navigation.

Однако я не уверен, что ваш код init() контроллера будет работать так, как вы хотите. Я не думаю, что findByUri() будет работать на страницах Mvc (но я мог ошибаться), и из вашего предыдущего вопроса было похоже, что большинство страниц вашего XML-файла являются Mvc-тегами. Класс Mvc имеет свойство «href», которое представляется эквивалентным. Если ваш XML-файл содержит оба типа страниц, вам может потребоваться проверить оба варианта, поэтому я бы предложил примерно следующее:

$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; 
} 
+0

@Tim Fountain, Sir you are a star !!! Дважды в один день СПАСИБО! Я говорю вам, если бы это не было для этого сайта и ведро загрузки кофе, я уверен, что у меня будет нервный срыв! снова большое спасибо! –

Смежные вопросы