Виды доступа в моделях / контроллерах

У меня есть класс 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 находятся в одном каталоге.

Solutions Collecting From Web of "Виды доступа в моделях / контроллерах"

Вы создаете новый экземпляр 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