Как мы перебираем объект, который реализует итератор - PullRequest
0 голосов
/ 01 сентября 2010

Iam рендеринг меню (используя Zend Framework) (zend_navigation)

что я делаю, получая страницу как метку, если страница имеет значение «myPage» чем тогда я устанавливаю новый URI со страницей, как ожидалось

$it = new RecursiveIteratorIterator(
$container, RecursiveIteratorIterator::SELF_FIRST);

 foreach ($it as &$page) {
   $label = $page->label;
   if($label = "MyPage"){
    $newuri = "mypage.php?stcode=".$stcode."&cde=".$cde;            
    $page->setUri($newuri);
}           

}

В приведенном выше заявлении я получаю ошибку Msgstr "Итератор не может использоваться с foreach по ссылке". Я хочу использовать ссылку, чтобы на основе метки я мог указать страницу на новый адрес

Теперь моя проблема и все пункты меню в меню получают один и тот же URI.

1 Ответ

6 голосов
/ 01 сентября 2010

Работает ли без &?Объекты по умолчанию передаются по ссылке в PHP, поэтому вызов setUri должен (теоретически) изменить исходный объект.Также обратите внимание, что ваш оператор if выполняет присваивание ($ label = "MyPage"), а не сравнение ($ label == "MyPage").

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

$page = $container->findByLabel('MyPage');
$page->setUri("mypage.php?stcode=".$stcode."&cde=".$cde);

См. http://framework.zend.com/manual/en/zend.navigation.containers.html#zend.navigation.containers.finding, чтобы найти еще несколько примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...