Доступ к представлениям в моделях / контроллерах - PullRequest
1 голос
/ 13 февраля 2011

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

Ответы [ 3 ]

5 голосов
/ 13 февраля 2011

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

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

Кроме того, я думаю, что путь сценария просмотра должен быть относительно папки APPLICATION_PATH/views/scripts.

3 голосов
/ 15 февраля 2011

Я сделал это так:

Я изменил свой 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); в моем коде.

Справка:

2 голосов
/ 13 февраля 2011

Если вы используете полный стек 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 документы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...