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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблемы с Render'ом в Zend Framework

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Михаил
Отправлено: 17 Декабря, 2010 - 10:40:48
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Здравствуйте!
В самом начале пути к освоению Zend Framework я столкнулся с такой проблемой - при использовании $this->render('header.phtml') выскакивает фатальная ошибка.
Немного обрисую ситуацию:

есть файл начальной загрузки index.php:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.  
  3. error_reporting(E_ALL|E_STRICT);
  4. date_default_timezone_set('Europe/London');
  5. set_include_path('.'.PATH_SEPARATOR . './library'
  6.    .PATH_SEPARATOR.'./application/models/'
  7.    .PATH_SEPARATOR.get_include_path());
  8.  
  9. include "Zend/Loader.php";
  10. Zend_Loader::loadClass('Zend_Controller_Front');
  11.  
  12. // setup controller
  13. $frontController = Zend_Controller_Front::getInstance();
  14. $frontController->throwExceptions(true);
  15. $frontController->setControllerDirectory('./application/controllers');
  16.  
  17. // run!
  18. $frontController->dispatch();
  19.  
  20.  
  21.  


контроллер IndexController.php:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.  
  3. class IndexController extends Zend_Controller_Action
  4. {
  5.    function init()
  6.    {
  7.        $this->view->baseUrl = $this->_request->getBaseUrl();
  8.    }
  9.        
  10.    function indexAction()
  11.    {
  12.        $this->view->title = "My Albums";
  13.                 echo "<p>in IndexController::indexAction()</p>";
  14.    }
  15.  
  16.    function addAction()
  17.    {
  18.        $this->view->title = "Add New Album";
  19.                 echo "<p>in IndexController::addAction()</p>";
  20.    }
  21.  
  22.    function editAction()
  23.    {
  24.        $this->view->title = "Edit Album";
  25.                 echo "<p>in IndexController::editAction()</p>";
  26.    }
  27.  
  28.    function deleteAction()
  29.    {
  30.        $this->view->title = "Delete Album";
  31.                 echo "<p>in IndexController::deleteAction()</p>";
  32.    }
  33. }


4 файла видов index.phtml, edit.phtml, add.phtml, delete.phtml:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <html>
  3. <head>
  4.     <title><?php echo $this->escape($this->title); ?></title>
  5. </head>
  6. <body>
  7.     <h1><?php echo $this->escape($this->title); ?></h1>
  8. </body>
  9. </html>


до этого момента всё работает, но всё меняется, когда я пытаюсь сделать общий хэдер для этих 4 файлов. Вот его код (header.phtml):
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  5. <head>
  6.     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  7.     <title><?php echo $this->escape($this->title); ?></title>
  8.     <link rel="stylesheet" type="text/css" media="screen"
  9.    href="<?php echo $this->baseUrl;?>/public/styles/site.css" />
  10. </head>
  11. <body>
  12.     <div id="content">


Файлы index.phtml, edit.phtml, add.phtml, delete.phtml тоже изменяю:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php echo $this->render('header.phtml'); ?>
  2.  
  3.         <h1>
  4.                 <?php echo $this->escape($this->title); ?>
  5.         </h1>
  6.        
  7. <?php echo $this->render('footer.phtml'); ?>
  8.  


В результате высвечивается ошибка:
Цитата:

Fatal error: Uncaught exception 'Zend_View_Exception' with message 'script 'header.phtml' not found in path (./application/views\scripts/)' in C:\Program Files\VertrigoServ\www\zenden\library\Zend\View\Abstract.php:980 Stack trace: #0 C:\Program Files\VertrigoServ\www\zenden\library\Zend\View\Abstract.php(876): Zend_View_Abstract->_script('header.phtml') #1 C:\Program Files\VertrigoServ\www\zenden\application\views\scripts\index\index.phtml(1): Zend_View_Abstract->render('header.phtml') #2 C:\Program Files\VertrigoServ\www\zenden\library\Zend\View.php(108): include('C:\Program File...') #3 C:\Program Files\VertrigoServ\www\zenden\library\Zend\View\Abstract.php(880): Zend_View->_run('./application/v...') #4 C:\Program Files\VertrigoServ\www\zenden\library\Zend\Controller\Action\Helper\ViewRenderer.php(897): Zend_View_Abstract->render('index/index.pht...') #5 C:\Program Files\VertrigoServ\www\zenden\library\Zend\Controller\Action\Helper\ViewRenderer.php(918): Zend_Controller_Action_Helper_ViewRenderer->renderScript('index/i in C:\Program Files\VertrigoServ\www\zenden\library\Zend\View\Abstract.php on line 980


Не подскажете, с чем это может быть связано?


P.S. если в файлах вида поменять $this->render на старый добрый include, всё работает:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php include('header.phtml'); ?>
  2.  
  3.         <h1>
  4.                 <?php echo $this->escape($this->title); ?>
  5.         </h1>
  6.        
  7. <?php include('footer.phtml'); ?>

(Отредактировано автором: 17 Декабря, 2010 - 10:46:58)

 
 Top
garvey
Отправлено: 17 Декабря, 2010 - 18:46:05
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




Зачем писать так много букв. Внимательно читайте ошибки, переводите их, анализируйте. Брошено исключение, и в нем сказано, что нету файла header.phtml там, где он должен быть. а он должен быть в view/scripts/header.phtml. Если у вас он в другом месте, то в render напишите другое.
PHP:
скопировать код в буфер обмена
  1. <?= $this->render('путь от папки scripts') ?>
 
 Top
Михаил
Отправлено: 17 Декабря, 2010 - 20:24:10
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Пардон Закатив глазки
Действительно не в ту папку поместил...)
Спасибо!)))
(Добавление)
Кстати, раз уж разговор зашел о Zend Framework, кто-нибудь подскажет где найти русскоязычную литературу по данной теме?)
 
 Top
JustUserR
Отправлено: 17 Декабря, 2010 - 20:49:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Михаил пишет:
Действительно не в ту папку поместил...)
В общем случае среда окружения текущего исполняемого процесса такого как PHP-приложение включает в себя параметры работчей директории и списков путей для автоматического включения ресурсов - как правило установка данных параметров производится в инстанции родительского процесса и в конфигурации web-сервера может быть обеспечена параметрами alias-инга и действенного перенаправленя - по этой причине вместо актуальной директории расположения файла может использоваться путь нахождения обрабатывающего компонента


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB