2012-02-12 11 views
4

私はZendフレームワークの本を使って作業しています。この方法は、以下のように記載されて:ZendのsetScriptPathがファイルを見つけることができません

$this->view->setScriptPath("/views/"); 
$this->render("news"); 

私はviewsディレクトリ(デフォルトではなくviews/scripts/artistで私news.phtmlファイルを置くが、私が得たすべてのページが見つからないというメッセージは、私はより多くの方法を試してみました。このよう

$this->view->setScriptPath("/application/views/"); 

または

$this->view->setScriptPath(APPLICATION_PATH."/views/"); 

が、すべてが機能していないと入力するなど、Web、。

誰か教えてください。


明快さを改善するために、私は機内セットアップと関係があると考えています。私はMac 10.7で動作しており、組み込みのPHPとApacheを起動しています。 Zendは独自のスタックを提供しているので、php.iniなどの設定ファイルには何らかの衝突がありますか?
より編集:私は viewsディレクトリに news.phtmlを置い

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'); 
} 

: 私は、全体の方法を下に入れています。私が入力したURLはhttp://localhost:10088/loudbite/artist/newsです。 artistControllerは、コントローラフォルダにあります。まだ動作しません。 どうしたのですか?

答えて

5

でスクリプトのパスを設定することができますカレントディレクトリ。移植性のために、絶対パスを使用するのが最適です。

Zend_View::render()を呼び出すときは、その拡張子を含むスクリプト名を渡す必要があります。あなたの最後の例に基づいて

、このような何かを試してみてください。

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

ただパスが正しい取得することを確認してください。私の例では、applicationフォルダにviewsがあると仮定しています。

EDIT: あなたがコントローラであり、あなたは別のビュースクリプトを使用したい場合は、代わりにView Renderer helperを使用します。

$this->_helper->viewRenderer->setRender('news'); 

これは、ビュースクリプトを探すためにビューレンダラを伝えますあなたの行動の名前の代わりにnews.phtml。しかし、news.phtmlについてはまだviews/scripts/controller/です。したがって、あなたにも、以下の変更が必要になります。

// 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

私はそれを前に試しました。私が試みた無数の順列の1つ。私はうまくいきません。 – Standstill

+0

ほとんどの場合例外が発生しますか?私はZendアプリケーションとスタンドアロンの両方の上で私の正確なメソッドを使用して、それを動作させることができるはずです。どこからこれをやろうとしているのですか?コントローラーなど? – drew010

+0

はい。上記のコードはコントローラ内にあるので、ビューはデフォルトのビュー/ scripts /フォルダに向けられます。 setScriptPath()を使用して別のフォルダに変更すると、ブラウザにページが見つかりませんと表示されます。 – Standstill

0

Zend_Applicationを使用していますか?または、Zend_Viewを単独で使用しようとしていますか?

あなたが作成したコードはZend_Viewオブジェクトを作成して$ viewに割り当てますが、作成したばかりのZend_Viewではなく$ this-> viewでsetScriptPathを呼び出します。

あなたがZend_Applicationを使用している場合setScriptPath()またはaddScriptPathを使用して、あなたのにディレクトリへの絶対パス、または相対パスを指定する必要がある場合、あなたはの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

+0

Zend_Viewオブジェクトを追加することは、私が読んだいくつかのフォーラム投稿からでした。私はその声明を削除しても動作しません。 – Standstill

0

答えが見つかりました。間違っていましたが、それが重要であることはわかりませんでした。 初めてNetbeansでプロジェクトを読み込むときに、フォルダにあるindex.phpのインデックスファイルが要求されました。私はそれを空にしました。これはNetbeansでのプロジェクト作成時に明確に定義する必要があります。 すでに間違いを犯したことがある場合は、index.phpを参照して定義を修正してください。

関連する問題