3

ブログアプリケーションに関するYiiFrameworkのチュートリアルを見ています。私は理解の過程にありますが、1つの主要なコンポーネントを理解していません。これは特定の.phpビューファイルの先頭にあります。

<?php
$this->breadcrumbs=array(
    'Manage Posts',
);
?>

どこから来たのか知りたいのですが$this。私の知る限り$this、クラスの範囲内にある場合にのみ使用できます。ただし、ここにはクラスが実装されていないので、Yiiが私のためにこれをどのように行うかについて誰かに教えてもらえますか?

4

3 に答える 3

3

$thisここでは、現在のコントローラー クラスを参照します。components/Controller.phpにコントローラーが表示されている場合は、$breadCrumbs=array();. ビューの決定的なガイドを参照してください:

ビュー スクリプト内では、$thisを使用してコントローラー インスタンスにアクセスできます。したがって、ビューで$this->propertyNameを評価することにより、コントローラーの任意のプロパティを取得できます。

コントローラーは、最終的にrenderInternalを使用してビューをレンダリングします。そして、その関数のソースを見ると、phprequire()が表示されます:

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

また、require が使用されているため、コードが含まれている時点で $this を使用できます。

ファイルがインクルードされると、そこに含まれるコードは、インクルードが発生した行の変数スコープを継承します。呼び出しファイルのその行で使用可能な変数は、その時点以降、呼び出されたファイル内で使用できます。ただし、インクルード ファイルで定義されているすべての関数とクラスには、グローバル スコープがあります。

したがって、これを行うと$this->render('view');view$ にアクセスできるようになりますthis

于 2012-06-28T18:29:04.707 に答える
2

Yii はテンプレートをクラスにコンパイルするので、実行時には実際にクラスが作成されます。詳細については、 を確認__FILE__get_class($this)てください。

于 2012-06-28T18:01:00.027 に答える
1

このテンプレートがrequireメソッド内にある場合、実際にはオブジェクトスコープに入ります。つまりthis、temlateをレンダリングするViewオブジェクトを表します。

于 2012-06-28T18:02:51.520 に答える