2012-02-12 98 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來修改定義。