我正在使用Zend框架书,并且在我更改默认视图位置的示例上停留了好几天。方法如下:
$this->view->setScriptPath("/views/");
$this->render("news");
我将news.phtml
文件放在views
目录中(而不是默认的views/scripts/artist
,但我得到的是一条说明找不到页面的消息。我尝试了很多方法来自网络,例如输入
$this->view->setScriptPath("/application/views/");
或
$this->view->setScriptPath(APPLICATION_PATH."/views/");
但都没有用。
有人可以赐教吗? <小时/> 为了提高清晰度,我有点怀疑它与我的机器设置有关。我在Mac 10.7上运行,我已经激活了内置的PHP和Apache。既然Zend提供了自己的堆栈,那么php.ini等设置文件会不会有任何冲突?
public function newsAction()
{
//Check if the user is logged in
//Get the user's id
//
//Get the artists
$artists = array("Thievery Corporation",
"The Eagles",
"Elton John");
//Set the view vairables
$this->_helper->viewRenderer->setRender('news');
$this->view->setScriptPath(APPLICATION_PATH.'/views/');
$this->_helper->viewRenderer->setNeverController(true)->setRender('news');
}
我将news.phtml
放在views
目录中。我输入的网址是http://localhost:10088/loudbite/artist/news
。 artistController
位于controllers文件夹中。仍然无法正常工作。
怎么了?
答案 0 :(得分:5)
使用setScriptPath()
或addScriptPath
时,需要指定目录的绝对路径或相对于当前目录的路径。为了便于携带,最好使用绝对路径。
调用Zend_View::render()
时,您必须传递脚本名称,包括其扩展名。
根据您的上一个示例,尝试以下内容:
$view->setScriptPath(APPLICATION_PATH . '/views/');
$html = $view->render('news.phtml');
确保路径正确无误。我的示例假设您在views
文件夹中有application
。
编辑: 如果您在控制器中并且想要使用其他视图脚本 ,请改用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,则需要在操作完成之前终止请求,以免呈现任何其他内容。还有一些方法可以禁用布局或视图渲染作为替代方法。
答案 1 :(得分:0)
您使用的是Zend_Application吗?或者您只是尝试独立使用Zend_View?
您创建的代码创建了Zend_View对象并将其分配给$ view,但是您在$ this-&gt;视图上调用setScriptPath,而不是刚刚创建的Zend_View。
如果您使用的是Zend_Application,则可以在application.ini
中设置脚本路径// Layout
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
// Views
resources.view.encoding = "UTF-8"
resources.view.basePath = APPLICATION_PATH "/views/"
答案 2 :(得分:0)
我找到了答案。对我来说是错误的,但我不知道这很重要。
第一次在Netbeans中加载项目时,它请求索引文件,index.php
文件夹中的public
。我把它留空了。它应该在Netbeans的项目创建过程中明确定义。
如果您已经犯了错误,那么您可以转到index.php来修改定义。