У меня есть класс MyData.php:
class myData { function render() { $view = new Zend_View(); $view->str = 'This is string.'; echo $view->render('myview.phtml'); } }
и файл myview.phtml:
<div id='someid'><?= $this->str ?></div>
В другом представлении я делаю что-то вроде этого:
<?php $obj = new myData (); $obj->render(); // it should be <div id='someid'>This is string.</div> ?>
Это дает мне следующее исключение:
Message: no view script directory set; unable to determine location for view script
MyData.php и myview.phtml находятся в одном каталоге.
Вы создаете новый экземпляр Zend_View. Вы не должны этого делать. Чтобы получить существующий экземпляр представления, вы можете сделать следующее:
$view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');
Кроме того, я считаю, что путь сценария просмотра должен быть относительно папки APPLICATION_PATH/views/scripts
.
Я сделал это так:
Я изменил myview.phtml на myview.php
<div id='someid'><?= $this->str ?></div>
В функции рендеринга класса myData:
class myData { function render() { $view = new Zend_View(); $view->setScriptPath( "/Directory/Path/For/myview/php/file" ); $view->str = 'This is string.'; echo $view->render('myview.php'); } }
И все работает, как я спросил. Мне не хватало $view->setScriptPath($path);
в моем коде.
Помогите:
Если вы используете полный стек MVC, вам лучше просто создать помощник вида для этого типа вещей … или просто передать использование вспомогательного помощника Partial и передать ему свой объект.
Например, с существующим Zend_View_Helper_Partial ….
в вашем контроллере создайте объект myData и присвойте ему представление:
public function indexAction() { $this->view->mydata = new MyData(); }
в представлении о действии:
echo $this->partial('myview.phtml', array('obj' => $this->mydata));
Затем в вашем myview.phtml
вы можете сделать:
<div><?php echo $this->obj->somevar ?></div>
Для вашего примера похоже, что вам даже не нужен объект myData, вы можете просто назначить переменную str
для представления и передать ее частичной вместо создания объекта.
Вы должны прочитать документы Zend_View
…