データ・ウィジェット ==================== Yii はデータを表示するために使うことが出来る一連の [ウィジェット](structure-widgets.md) を提供しています。 [DetailView](#detail-view) は、単一のレコードのデータを表示するのに使うことが出来ます。 それに対して、[ListView](#list-view) と [GridView](#grid-view) は、複数のデータ・レコードをリストまたはテーブルで表示することが出来るもので、 ページネーション、並べ替え、フィルタリングなどの機能を提供するものです。 DetailView ---------- DetailView は単一のデータ [[yii\widgets\DetailView::$model|モデル]] の詳細を表示します。 モデルを標準的な書式で表示する場合 (例えば、全てのモデル属性をそれぞれテーブルの一行として表示する場合) に最も適しています。 モデルは [[\yii\base\Model]] またはそのサブ・クラス、例えば [アクティブ・レコード](db-active-record.md) のインスタンスか、連想配列かのどちらかにすることが出来ます。 DetailView は [[yii\widgets\DetailView::$attributes]] プロパティを使って、モデルのどの属性が表示されるべきか、また、どういうフォーマットで表示されるべきかを決定します。 利用できるフォーマットのオプションについては、[フォーマッタのセクション](output-formatting.md) を参照してください。 次に DetailView の典型的な用例を示します。 ```php echo DetailView::widget([ 'model' => $model, 'attributes' => [ 'title', // title 属性 (平文テキストで) 'description:html', // description 属性は HTML としてフォーマットされる [ // モデルの所有者の名前 'label' => '所有者', 'value' => $model->owner->name, 'contentOptions' => ['class' => 'bg-red'], // 値のタグをカスタマイズする HTML 属性 'captionOptions' => ['tooltip' => 'Tooltip'], // ラベルのタグをカスタマイズする HTML 属性 ], 'created_at:datetime', // 作成日時は datetime としてフォーマットされる ], ]); ``` [[yii\widgets\GridView|GridView]] が一組のモデルを処理するのとは異なって、 [[yii\widgets\DetailView|DetailView]] は一つのモデルしか処理しないということを覚えておいてください。 表示すべきモデルはビューの変数としてアクセスできる `$model` 一つだけですから、たいていの場合、クロージャを使用する必要はありません。 しかし、クロージャが役に立つ場合もあります。例えば、`visible` が指定されており、それが `false` と評価される場合には `value` の計算を避けたい場合です。 ```php echo DetailView::widget([ 'model' => $model, 'attributes' => [ [ 'attribute' => 'owner', 'value' => function ($model) { return $model->owner->name; }, 'visible' => \Yii::$app->user->can('posts.owner.view'), ], ], ]); ``` ListView -------- [[yii\widgets\ListView|ListView]] ウィジェットは、[データ・プロバイダ](output-data-providers.md) からのデータを表示するのに使用されます。 各データ・モデルは指定された [[yii\widgets\ListView::$itemView|ビュー・ファイル]] を使って表示されます。 ListView は、特に何もしなくても、ページネーション、並べ替え、フィルタリングなどの機能を提供してくれますので、 エンド・ユーザに情報を表示するためにも、データ管理 UI を作成するためにも、非常に便利なウィジェットです。 典型的な使用方法は以下の通りです。 ```php use yii\widgets\ListView; use yii\data\ActiveDataProvider; $dataProvider = new ActiveDataProvider([ 'query' => Post::find(), 'pagination' => [ 'pageSize' => 20, ], ]); echo ListView::widget([ 'dataProvider' => $dataProvider, 'itemView' => '_post', ]); ``` `_post` ビューは次のような内容を含むことが出来ます。 ```php