Intereting Posts
Как получить агент пользователя в PHP Создание и загрузка файла с помощью PHP Как определить HTTP-метод в CodeIgniter что такое сеанс и файлы cookie в php и где он хранится Как выполнить модульное тестирование Наиболее эффективный способ передачи переменных PHP во внешний файл JavaScript (или jQuery) Загрузите видеофайлы с помощью PHP и сохраните их в соответствующей папке и введите запись в базу данных cakephp3 не может вставлять данные в связанные таблицы, используя метод 'associated' XSL – получите SUM цены Выпадающее меню, основанное на другом раскрывающемся списке, выбирает параметр из базы данных PHP Foreach Pass по ссылке: Дублирование последнего элемента? (Ошибка?) Могу ли я предсказать, насколько большой будет мой индекс Zend Framework? (и некоторые быстрые Q: s) Безопасный способ отправки почты через PHP многим пользователям Лучший PHP lib / class для генерации RSS / Atom Сохранение изображений в базе данных mysql

Добавить Zend_Navigation к представлению со старым устаревшим загрузочным блоком

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

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

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

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

Похоже, что это выполняется отлично, но когда я перехожу к использованию помощника вида breadcrumb в моем макете, он вызывает ошибки: Строгие стандарты: создание объекта по умолчанию из пустого значения в 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 не находится в представлении.

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

    Благодаря,

    Грант

    Related of "Добавить Zend_Navigation к представлению со старым устаревшим загрузочным блоком"

    Сначала вам нужно выяснить, верно ли ваше подозрение, что 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; }