Я только что столкнулся с проблемой необходимости нескольких переходов, и в процессе обнаружил вашу проблему, и это на самом деле ошибка в Zend_View_Helper_Navigation_HelperAbstract
.
Строка 516:
public function __toString()
{
try {
return $this->render();
} catch (Exception $e) {
$msg = get_class($e) . ': ' . $e->getMessage();
trigger_error($msg, E_USER_ERROR);
return '';
}
}
Проблема в том, что если вы явно не вызываете $this->navigation->render($container)
или магический метод, такой как $this->navigation()->menu($container)
, то вызов render
заканчивается тем, что ему не передается контейнер.
Это в свою очередь приводит к тому, что помощник вида по умолчанию для navigation
, то есть menu
, извлекается из registry
(в этом случае он будет использовать последний заданный контейнер) или создается на месте (который вызывает отсутствие контейнера).
Это мое простое исправление, которое вызывает getContainer
на __toString
.
Строка 516:
public function __toString()
{
try {
return $this->render($this->getContainer());
} catch (Exception $e) {
$msg = get_class($e) . ': ' . $e->getMessage();
trigger_error($msg, E_USER_ERROR);
return '';
}
}
Просматривая все вспомогательные файлы, связанные с Navigation
, становится ясно, что целью было вызвать getContainer
. Также ясно, что это не проблема, если вы вызываете помощник вида menu
либо напрямую, либо с помощью магического метода navigation
.
Как только вы измените эту строку выше, вы сможете вызывать $this->navigation($container)
и выполнять несколько переходов, не прибегая к непосредственному вызову menu
помощника.