2012-02-12 97 views
4

我正在通过Zend框架书工作,并且在更改默认视图位置的示例中停留了几天。作为上市的方法:Zend中的setScriptPath无法找到文件

$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.phtmlviews目录。我输入的网址是http://localhost:10088/loudbite/artist/newsartistController位于控制器文件夹中。仍然不起作用。 有什么不对?

回答

5

脚本路径使用setScriptPath()addScriptPath,你需要指定相对路径的绝对路径的目录,或者你当前目录。为了便携,使用绝对路径是最好的。

当致电Zend_View::render()时,您必须传递脚本名称及其扩展名。

根据您的最后一个例子,尝试这样的事情:

$view->setScriptPath(APPLICATION_PATH . '/views/'); 
$html = $view->render('news.phtml'); 

只要确保拿到路径是正确的。我的例子假设你的application文件夹中有views

编辑: 如果你是在一个控制器和您要使用不同的视图脚本,使用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的应用程序,它自己的视图渲染,所以,除非你试图直接呈现为使用HTML,你不应该使用Zend_View的自己。在您的控制器操作方法完成后,Zend Application将自动呈现视图脚本并尝试将其输出以及任何布局输出到浏览器。如果您确实创建了自己的Zend_View,则需要在操作完成之前终止请求,因为不会呈现任何其他内容。也有办法禁用布局或视图渲染作为替代。

+1

我曾尝试过。我试过的无数组合之一。我不工作。 – Standstill 2012-02-12 03:10:03

+0

在大多数情况下你会得到一个例外,而不是在一些情况下?我在Zend应用程序和独立程序中都使用了我的精确方法,所以您应该能够使其工作。你从哪里试图做到这一点?控制器还是其他地方? – drew010 2012-02-12 03:14:55

+0

是的。上面的代码在控制器中,所以视图将被定向到默认views/scripts /文件夹。如果我通过setScriptPath()更改为另一个文件夹,我的浏览器会说找不到页面。 – Standstill 2012-02-12 03:45:13

0

你在使用Zend_Application吗?或者你只是试图独立使用Zend_View?

你创建了一个Zend_View对象并将其赋值给$ view,但是你在$ this-> view上调用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/" 
+0

它不起作用。给我一个错误消息。 – Standstill 2012-02-12 02:42:22

+0

添加Zend_View对象来自我读过的一些论坛帖子。即使我删除该声明也不起作用。 – Standstill 2012-02-12 03:15:30

0

我找到了答案。我的错误,但我不知道这很重要。 第一次在Netbeans中加载项目时,它要求索引文件文件夹中的index.php。我把它留空。在Netbeans的项目创建过程中应该明确定义它。 如果你已经犯了错误,那么你可以去index.php来修改定义。