18

Teacher モデルに、カテゴリ配列を返す関数があります。

getCaterogies() {
   return array('1' => 'short tempered', '2' => 'funny', '3' => 'visionary', ...);
}

データベースにインデックスを保存し、それに対応する配列の値を使用してどこにでも値を表示しています..

$categories = $teacher->categories;
$category = $categories[$teacher->category];

私がこれを行っているのは、ステータスである文字列をデータベースに保存せず、代わりに整数値を保存し、変換をデータベースに保存するか、ht モデルで定義するように提案されたからです。文字列の問題は、比較時に人的エラーが発生しやすいことです。大文字と小文字を区別するためかもしれません。

今私が直面している問題は、グリッドビューに値を表示しているときに、値フィールドに2行を書き込む必要があることですが、それは式であり、外部変数もかかりません。

これをグリッドビューで機能させるにはどうすればよいですか?

4

3 に答える 3

48

行番号(ゼロベース)を保持し、行のデータモデルを含む$rowparams$dataを取ることができる値として無名関数を使用できます。$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 回だけで、すべての場合に使用されるためです。

于 2012-07-21T17:21:11.600 に答える
2

あなたは書ける

$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',
        ...
    );
}
于 2012-07-21T17:18:40.303 に答える
0

'urlCreator' => function ($action, $model, $key, $index) use($under_category) {

于 2021-04-28T11:49:11.630 に答える