Teacherモデルにcategories配列を返す関数があります。
getCaterogies() {
return array('1' => 'short tempered', '2' => 'funny', '3' => 'Visionary', ...);
}
データベースにインデックスを格納し、それに対応する配列の値を使用してどこにでも値を表示しています。
$categories = $teacher->categories;
$category = $categories[$teacher->category];
これを行っているのは、ステータスである文字列をデータベースに保存せず、代わりに整数値を保存し、変換をデータベースに保存するか、htモデルで定義するように提案されたためです。文字列の問題は、文字列が比較で人為的エラーを起こしやすいことです。おそらくケースの敏感さのためです。
今私が直面している問題は、グリッドビューで値を表示しているときに、値フィールドに2行を書き込む必要があるということですが、これは式であり、外部変数も使用しません。
これをgridviewで機能させるにはどうすればよいですか?
$row
、$data
paramsを取ることができる値として無名関数を使用できます。ここで、$row
は行番号(ゼロベース)を保持し、$data
は行のデータモデルを含みます。
そうすれば、内部でのみ定義することができます。
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
array(
'name'=>'..',
'value'=>function($data,$row){
$categories = $teacher->categories;
return $categories[$data->category];
},
),
),
));
また、外部から使用する場合は、PHPのuse
を信頼できます。
$categories = $teacher->categories;
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
array(
'name'=>'..',
'value'=>function($data,$row) use ($categories){
return $categories[$data->category];
},
),
),
));
個人的には2つ目をお勧めします。そうすれば、配列の計算は1回だけで、すべての場合に使用されるからです。
あなたは書ける
$categories = $teacher->categories;
$category = $categories[$teacher->category];
一行で:
$category = $teacher->categories[$teacher->category];
また、別のソリューションを使用することをお勧めします。
class ModelClass
{
const STATUS_SHORT_TEMPERED = 1;
const STATUS_FUNNY = 2;
const STATUS_Visionary = 3;
}
これにより、よりセマンティックなものを使用できます
ModelClass::STATUS_FUNNY;
意味論的ではなく
2;
また、次の方法でアレイを構成できます。
getCaterogies() {
return array(
ModelClass::STATUS_FUNNY => 'status funny',
...
);
}