ビュー

ビューは主にユーザインタフェースの要素によって構成される PHP スクリプトです。 ビューには PHP 文を含める事ができますが、その PHP 文でデータモデルを変更すべきではなく、また、比較的シンプルなものに留めておくことを推奨します。 ロジック部とプレゼンテーション部の分離の精神に基づいて、ロジックの大部分はビューではなく、コントローラかモデルに置くべきです。

ビューは、描画の際にビュースクリプトファイルを識別するために使われる名前を持ちます。 ビューの名前はビュースクリプトファイル名と同じです。 たとえば、ビュー editedit.php という名前のビュースクリプトファイルを参照します。 ビューを描画するためには、ビュー名を引数にして CController::render() をコールします。 このメソッドは protected/views/ControllerID ディレクトリ下にある、対応するビューファイルを探します。

ビュースクリプト中では、$this を使用してコントローラインスタンスへのアクセスが可能です。 従って、ビューの中では $this->propertyName という形でコントローラのプロパティを参照できます。

さらに、データをビューに渡すために、次の方法を使用することができます:

$this->render('edit', array(
    'var1'=>$value1,
    'var2'=>$value2,
));

上記では、render() メソッドは 2 番目の配列のパラメータを変数へ展開します。 その結果、ビュースクリプト内では、ローカル変数 $var1$var2 としてアクセスできます。

1. レイアウト

レイアウトは、ビューを装飾するために使用される特別なビューで、通常、いくつかのビューに共通しているユーザインタフェースの部分を含みます。 たとえば、以下のように、レイアウトはヘッダーとフッターを含み、その間にビューを埋め込むことが出来ます。

...... ここにヘッダ ......
<?php echo $content; ?>
...... ここにフッタ ......

ここで、$content がビューのレンダリング結果を格納するものです。

レイアウトは render() をコールするとき、暗黙に適用されます。 デフォルトでは、ビュースクリプト protected/views/layouts/main.php がレイアウトとして使用されます。 これは、 CWebApplication::layoutCController::layout のいずれかを変更することで、カスタマイズ可能です。 レイアウトを適用せずにビューの描画を行うには、代わりに renderPartial() をコールします。

2. ウィジェット

ウィジェットは、CWidgetCWidget の子クラスのインスタンスです。 これは、主に表示的な用途を持つコンポーネントです。 ウィジェットは、通常、複雑ではあっても自己完結したユーザインタフェースを生成するためにビュースクリプトに埋め込まれます。 たとえば、カレンダーウィジェットは複雑なカレンダーユーザインタフェースを表示させるために使用出来ます。 ウィジェットは、ユーザインタフェースコードの再利用性を高めてくれます。

ウィジェットを使うには、ビュースクリプト内で以下のようにします:

<?php $this->beginWidget('path.to.WidgetClass'); ?>
...ウィジェットによりキャプチャされる本文 (body content)...
<?php $this->endWidget(); ?>

または

<?php $this->widget('path.to.WidgetClass'); ?>

後の方法は、ウィジェットが本文 (body content) を必要としないときに用いられます。

ウィジェットを構成して挙動をカスタマイズするためには、CBaseController::beginWidget もしくは CBaseController::widget を呼び出す際に、プロパティの初期値を設定します。 たとえば、CMaskedTextField ウィジェットを使用する際に、使用されるマスクを指定したい場合は、下記のように、プロパティの初期値を配列として渡します。 ここで、配列のキーはプロパティ名、配列の値は対応するウィジェットプロパティの初期値です。

<?php
$this->widget('CMaskedTextField',array(
    'mask'=>'99/99/9999'
));
?>

新しいウィジェットを定義するには、CWidget を継承し、init()run() メソッドを上書きします:

class MyWidget extends CWidget
{
    public function init()
    {
        // CController::beginWidget() によってこのメソッドが呼ばれる
    }
 
    public function run()
    {
        // CController::endWidget() によってこのメソッドが呼ばれる
    }
}

コントローラのように、ウィジェットはそれ自身のビューを持つことができます。 デフォルトでは、ウィジェットのビューファイルは、そのビューファイルのあるディレクトリの views サブディレクトリに位置します。 コントローラと同じように、ビューは CWidget::render() を呼び出すことで描画させることができます。 唯一の違いは、ウィジェットビューにはレイアウトを適用できないことです。 さらにビュー中の $this はコントローラインスタンスを参照するのではなく、このウィジェットインスタンスを参照します。

ヒント: CWidgetFactory::widgets を使ってサイト全体のレベルでウィジェットを初期構成すると、基本になる設定を非常に楽に構成することができます。 詳細については テーマ のページを参照して下さい。

3. システムビュー

システムビューは、Yii によってエラーやロギング情報を表示するために使用されるビューです。 たとえば、存在しないコントローラやアクションがユーザによりリクエストされた場合、 Yii はそのエラーを説明する例外を投げ、特定のシステムビューを使用して、その例外を表示します。

システムビュー名は、いくつかのルールに基づきます。 errorXXX のような名前は、エラーコード XXXCHttpException エラー表示のためのビューを指します。 たとえば、もし CHttpException がエラーコード404により発生した場合、error404 ビューが表示されます。

Yii は framework/views 以下に、1セットのデフォルトシステムビューを提供します。 システムビューをカスタマイズしたい場合、protected/views/system 以下に、同じファイル名のビューファイルを作成してください。

Be the first person to leave a comment

Please to leave your comment.