2011-07-27 13 views
0

のプロパティ:PHP - Yiiの世代のビューファイルとき、私はこのコードを見つける宣言されていないオブジェクト

<?php 
    $this->breadcrumbs=array(
     'Deal'=>array('deal/index'), 
     'Create', 
    );?> 
    <h1><?php echo $this->id . '/' . $this->action->id; ?></h1> 

    <p>You may change the content of this page by modifying the file <tt><?php echo __FILE__; ?></tt>.</p> 

私は$これを知っているが、実際にはオブジェクトですが、私は来るか、いずれかが含まれたり、オブジェクトの宣言が表示されません私たちはその$ this-> idを持っていますか?

私は非常にPHPには新しく、またそれを学ぶことも非常に興奮しています:)。最初にありがとう。

+0

テンプレートで '$ this'を使わないのは良い理由です。 – erisco

+0

Yiiのチュートリアルhttp://www.yiiframeworkを参照してください。com/tutorials /フレームワークとそれがどのように構成されているかをまだ感じていない場合は、 – ldg

答えて

1

Yiiは(CBaseControllerで)次のビューレンダラを使用しています。コントローラを使用してデータビューを渡すことは悪い習慣と考えられますが、ビューを通してのデータの解析や他の機能(ウィジェットなど)へのアクセスには便利です。

コードサンプルでは、​​コントローラのプロパティブレッドクラムはビューによって変更され、ビューがレイアウト内にあってもレイアウトによって読み取られる可能性があります。これは、ビューがレンダリングされてレイアウトに挿入されるために機能します。また、これを使用することがコントローラからレイアウトにデータを渡す唯一の方法であることにも留意する価値があります。

yiiのドキュメントは素晴らしいですが、ソースを開いて、それがどのように動作するかを見るよりも優れたものはありません。結局のところ、それはオープンソースの要点です:D

0

コードが関数内(オブジェクト内)に含まれている場合は、オブジェクトのスコープ内にあることを意味します。

phpにインクルードすると、 "includer"内の変数が使用されます。この場合、$ thisは有効な変数です。

0

このファイルが含まれているか、クラスメソッド内にある可能性があります。それが含まれていれば、メソッドが静的でない場合は、$ thisを使用することは可能です。

0

$this->idは実際には存在しません。

0

デバッグ/理解の目的のために、あなたは、オブジェクトにビューをロードします

var_dump($this) 

または

print_r($this) 
1

何回フレームワークを呼び出してから、それらをレンダリングすることができます。これはその時代の一つです。この場合、CViewRendererがどのように動作し、renderInternalが動作するかに基づいて、現在のCControllerインスタンスをCBaseControllerインスタンスとします。

0

あなたが提示するコンテキスト(ビューファイル)では、「$ this」はControllerオブジェクトを表します。 "id"はコントローラの名前なので、SiteControllerでレンダリングされたビューファイルの場合、 "$ this-> id" = "site"となります。当然のことながら、 "$ this-> action-> id" =アクション名。

何らかのエラーが発生しているか、それが何を指しているのか不思議ですか?前述のとおり、print_r($this)でオブジェクトの内容を印刷することができます。あなたはあなたのビューコントローラのコンテキスト内で呼び出されるので、$本(コントローラー)へのアクセス権を持っているされて見ることができるように

public function renderInternal($_viewFile_,$_data_=null,$_return_=false) 
    { 
     // we use special variable names here to avoid conflict when extracting data 
     if(is_array($_data_)) 
      extract($_data_,EXTR_PREFIX_SAME,'data'); 
     else 
      $data=$_data_; 
     if($_return_) 
     { 
      ob_start(); 
      ob_implicit_flush(false); 
      require($_viewFile_); 
      return ob_get_clean(); 
     } 
     else 
      require($_viewFile_); 
    } 

関連する問題