Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопрос о построении вида в Zend
Форумы портала PHP.SU » » Вопросы новичков » Вопрос о построении вида в Zend

Страниц (1): [1]
 

1. imedia - 02 Февраля, 2016 - 13:25:27 - перейти к сообщению
Очень прошу откликнутся тех кто знаком с Зендом.
Быть может вам известна ситуация когда ты застрял и не можешь сдвинуться с мертвой точки, такие люди меня поймут.
Контроллер выглядит так
PHP:
скопировать код в буфер обмена
  1.  
  2.  public function indexAction()
  3.     {
  4.         // get the article from the persistence layer, etc...
  5.  
  6.         // Get the "layout" view model and set an alternate template
  7.         $layout = $this->layout();
  8.         $layout->setTemplate('layout/layout');
  9.         // Create and return a view model for the retrieved article
  10.         $view = new ViewModel(array('article' => 'Hello world'));
  11.         $view->setTemplate('content/article');
  12.         return $view;
  13.     }
  14.  

Не могу понять почему выводится только шаблон, и вообще не могу найти инфы чем шаблон от вида отличается, быть может подскажите?
То есть файл content/article.phtml не выводится вообще
В конфиге модуля у меня так относительно вида
PHP:
скопировать код в буфер обмена
  1.  
  2. 'view_manager' => array(
  3.         'display_not_found_reason' => true,
  4.         'display_exceptions'       => true,
  5.         'doctype'                  => 'HTML5',
  6.         'not_found_template'       => 'error/404',
  7.         'exception_template'       => 'error/index',
  8.         'template_map' => array(
  9.             'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
  10.                         'content/article'           => __DIR__ . '/../view/content/article.phtml',
  11.             'catalog/index/index' => __DIR__ . '/../view/catalog/index/index.phtml',
  12.             'error/404'               => __DIR__ . '/../view/error/404.phtml',
  13.             'error/index'             => __DIR__ . '/../view/error/index.phtml',
  14.         ),
  15.  
2. caballero - 02 Февраля, 2016 - 14:27:51 - перейти к сообщению
вид - это скорее логическое понятие.
А шаблон это часть физической реализации вида. Вид может использовать шаблоны а может и не использовать это уже от движка зависит.
3. imedia - 02 Февраля, 2016 - 16:28:58 - перейти к сообщению
ну а по сути если вы Зенд знаете то почему шаблон видно а вид нет?
4. armancho7777777 - 02 Февраля, 2016 - 17:08:21 - перейти к сообщению
imedia пишет:
То есть файл content/article.phtml не выводится вообще

Сам код верный.
Покажите содержимое файла: view/content/article.phtml.
(Добавление)
Полагаю, он у Вас пуст.
Вставьте
5. teddy - 02 Февраля, 2016 - 19:17:29 - перейти к сообщению
imedia пишет:
Быть может вам известна ситуация когда ты застрял и не можешь сдвинуться с мертвой точки, такие люди меня поймут.

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

imedia пишет:
Не могу понять почему выводится только шаблон, и вообще не могу найти инфы чем шаблон от вида отличается, быть может подскажите?

Шаблон это такой же экземпляр Zend\View\Model\ViewModel как и тот, что вы возвращаете из экшена. Только он создается не явно, а самим фреймворком. В контроллере доступен в качестве плагина layout, к которому вы и обращаетесь.
Это своего рода рутовый(root) view, к которому так же не явно как дочерний прицепляется экземпляр того ViewModel, который вы возвращаете из экшена.

Для рутового вью вы задали алиас шаблона layout/layout. Это означает, что в качестве повторяющегося шаблона будет использован тот файл, который соответствует записи layout/layout в конфиге. То есть __DIR__ . '/../view/layout/layout.phtml'.

Теперь, для того, что бы отобразить дочерний шаблон, нужно его отрендерить в родительском шаблоне(в файле, который соответствует layout/layout).
По умолчанию каждый экземпляр ViewModel имеет название content (в фреймворке именуется как captureTo). Используя это название, можно отрендерить соответствующую ViewModel.

Полагаю, что в файле, который является корневым шаблоном, просто не рендерится ViewModel. Напишите echo $this->content; в основом шаблоне.
Если ничего не изменится, то скорее всего armancho7777777 прав, ваш шаблон пуст. Ну или кто то поменял название по умолчанию для ViewModel. На всякий случай можно проверить, выполнив код var_dump($view->captureTo());

В принципе этой информации должно быть достаточно что бы решить проблему.
Более подробно о видах в ZF написано в официальной документации.

 

Powered by ExBB FM 1.0 RC1