При использовании setScriptPath()
или addScriptPath
необходимо указать абсолютный путь к каталогу или путь относительно текущего каталога.Для переносимости лучше использовать абсолютный путь.
При вызове Zend_View::render()
вы должны передать имя сценария, включая его расширение.
На основе вашего последнего примера попробуйте что-то вроде этого:
$view->setScriptPath(APPLICATION_PATH . '/views/');
$html = $view->render('news.phtml');
Просто убедитесь, что путь правильный.В моем примере предполагается, что у вас есть views
в папке application
.
EDIT: Если вы находитесь в контроллере и хотите использовать другой скрипт вида используйте взамен View Renderer helper вместо:
$this->_helper->viewRenderer->setRender('news');
Это говорит рендереру представления искать скрипт вида news.phtml
вместо имени вашего действия.Тем не менее, он все еще ищет в views/scripts/controller/
файл news.phtml.Поэтому вам также необходимы следующие изменения:
// set view script path to the base of the views folder
$this->view->setScriptPath(APPLICATION_PATH . '/views/');
$this->_helper
->viewRenderer
->setNeverController(true) // do not render into controller subdirectories
->setRender('news'); // set render script to news.phtml
Когда вы используете Zend Application, он выполняет свой собственный рендеринг представлений, поэтому, если вы не пытаетесь отобразить html для непосредственного использования, вы не должны использовать Zend_Viewсам.После того, как ваш метод действия контроллера завершится, Zend Application автоматически отобразит скрипт представления и попытается вывести его вместе с любым макетом в браузер.Если вы создали свой собственный Zend_View, вам необходимо прекратить запрос до завершения действия, чтобы не отображать какой-либо другой контент.Есть также способы отключить компоновку или просмотр представления в качестве альтернативы.