Я написал помощника, чтобы сделать мой основной навигационный файл. Часть этого помощника проверяет, вошел ли пользователь в систему, проверив, назначен ли пользователь представлению
if($this->view->user)
{
//do stuff
}
Однако, когда я вызываю этого помощника в моем скрипте макета, он не может получить доступ к $ this-> view-> user; он имеет значение NULL (хотя var_dump ($ this-> view возвращает объект представления, но не со всеми назначенными ему свойствами). Он может получить доступ только к пользовательским данным, если в скрипте представления я назначу их макету т.е.
$this->layout()->user = $this->user;
А потом в помощнике сделать
if($this->view->layout()->user)
{
//do stuff
}
Что является болью, так как в каждом скрипте представления мне нужно добавить строку для передачи данных в макет.
Есть ли способ, позволяющий помощникам, вызываемым в скрипте макета, получать доступ к свойствам представления?
редактировать *
Вот источник:
<?php
class Zend_View_Helper_MainNav extends Zend_View_Helper_Abstract {
public function mainNav()
{
if ($this->view->layout()->navType == 'none'){
$html = '<div id="nav"><a href="/" id="logo">Sum puzzles</a></div>';
} else if($this->view->layout()->navType == 'small'){
$html = '<div id="nav" class="small"><a href="/" id="logo">Sum puzzles</a><ul>' .
'<li><a href="/puzzle/view" class="button">play a puzzle</a></li>' .
'<li><a href="/sequence/play" class="button">puzzle sequences</a></li>' .
'<li><a href="/puzzle/create" class="button">create a puzzle</a></li>';
if(!$this->view->user)
{
$html .= '<li><a href="/teachers" class="button">teachers area</a></li>';
}
$html .='</ul></div>';
} else if($this->view->layout()->navType == 'large'){
$html = '<div id="nav" class="large"><a href="/" id="logo">Sum puzzles</a><ul>' .
'<li><a href="/sequence/play" class="playSequence">Play a sequence of puzzles</a></li>' .
'<li><a href="/puzzle/create" class="createPuzzle">Create your own puzzles</a></li>';
if(!$this->view->user)
{
$html .= '<li><a href="/teachers" class="teachersArea">teachers area</a></li>';
}
$html .= '</ul></div>';
}
return $html;
}
}