Создание модульного веб-сайта с Zend Framework: я на правильном пути? - PullRequest
0 голосов
/ 17 марта 2010

Я немного сбит с толку, прочитав все посты и учебные пособия о начале работы с Zend, потому что есть так много разных способов решения проблемы.

Мне просто нужно немного отзывов о моем коде, чтобы узнать, еслиЯ на правильном пути.

Чтобы просто получить (жестко запрограммированную) навигацию для своего сайта (в зависимости от того, кто вошел в систему), я создаю плагин контроллера с методом postDispatch:

 public function postDispatch(Zend_Controller_Request_Abstract $request) 
 {
  $menu = new Menu();

  //Render menu in menu.phtml
  $view = new Zend_View();

  //NEW view -> add View Helper
  $prefix = 'My_View_Helper';
  $dir = dirname(__FILE__).'/../../View/Helper/';
  $view->addHelperPath($dir,$prefix);

  $view->setScriptPath('../application/default/views/scripts/menu');
  $view->menu = $menu->getMenu();

  $this->getResponse()->insert('menu',  $view->render('menu.phtml'));     

 } 

Это правильно, что мне нужно снова установить путь помощника?Я сделал это в контроллере плагинов с именем ViewSetup.Там я делаю некоторые настройки для представления, такие как doctype, headlinks и helper paths (этот шаг из книги: Zend Framework в действии).

Класс Menu, который инициируется, выглядит следующим образом:

class Menu 
{
 protected $_menu = array();

 /**
 * Menu for notloggedin and logged in
 */
 public function getMenu()
 {
  $auth = Zend_Auth::getInstance();
  $view = new Zend_View();

  //check if user is logged in
  if(!$auth->hasIdentity()) {
   $this->_menu = array(
    'page1' => array(
     'label' => 'page1',
     'title' => 'page1',
     'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page1'))
    ),
    'page2' => array(
     'label' => 'page2',
     'title' => 'page2',
     'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page2'))
    ),
    'page3' => array(
     'label' => 'page3',
     'title' => 'page3',
     'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page3'))
    ),
    'page4' => array(
     'label' => 'page4',
     'title' => 'page4',
     'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page4'))
    ),
    'page5' => array(
     'label' => 'page5',
     'title' => 'page5',
     'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page5'))
    )
   );
  } else {
   //user is vom type 'client'
   //..

  }

  return $this->_menu;
 }
}

Вот мой сценарий просмотра:

<ul id="mainmenu">
  <?php echo $this->partialLoop('menuItem.phtml',$this->menu) ?>
</ul>

Пока это работает.У меня вопрос: это обычно так?есть что улучшить?Я новичок в Zend, и я видел устаревшие учебники в Интернете, которые часто не очевидны.Даже книга уже устарела, где упоминается автозагрузчик.

Ответы [ 2 ]

0 голосов
/ 18 марта 2010

Если вы не работаете на относительно небольшой стороне, я бы не стал делать это в контроллере, так как вам придется добавить это ко многим контроллерам. Почему бы не проверить загрузчик или даже проверить свой макет, для меня было бы больше смысла, хотя это было бы неправильно.

0 голосов
/ 17 марта 2010

Вы не должны создавать новый вид. Поскольку вы уже создали объект View в Boostrap (и использовали его для визуализации остальной части сайта), вам следует извлечь уже созданный объект View.

Если вы используете Zend_Application_Resource для настройки своего представления в начальной загрузке, вы можете получить его следующим образом:

$view = Zend_Controller_Front::getInstance()
    ->getParam('bootstrap')
    ->getResource('view');

Таким образом, нет необходимости снова устанавливать путь помощника вида и создавать другой объект вида.

Если вы не используете Zend_Application для ускорения своего приложения, вы можете попробовать что-то вроде этого:

$view = Zend_Layout::getMvcInstance()->getView();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...