私はコントローラーに3つの定数を持っています:
const TEST1 = 1;
const TEST2 = 2;
const TEST3 = 3;
ドロップダウンとして表示されているこれらの値を呼び出すにはどうすればよいですか?
さまざまなモデルにあるすべての定数に煩わされる場合は、私が作成したコードスニペットを使用してそれらを管理できます。定数の簡単な管理(yii wikiの記事)を参照してください。
関数と1つの例だけをコピーしますが、完全なwikiと詳細については、上記のリンクにアクセスしてください。
このメソッドを親クラスまたはモデルクラスに直接配置します。
class ActiveRecord extends CActiveRecord {
const TEST_1 = 1;
const TEST_2 = 2;
const TEST_3 = 3;
/*
Get class constants by token.
If you set constants with same prefix, like:
TEST_1
TEST_2
TEST_3
, you can get it by calling
Class::getConstants('TEST_');
*/
public static function getConstants($token,$objectClass) {
$tokenLen = strlen($token);
$reflection = new ReflectionClass($objectClass); //php built-in
$allConstants = $reflection->getConstants(); //constants as array
$tokenConstants = array();
foreach($allConstants as $name => $val) {
if ( substr($name,0,$tokenLen) != $token ) continue;
$tokenConstants[ $val ] = $val;
}
return $tokenConstants;
}
}
その後、このメソッドを使用して、配列内の特定の定数(1つのグループから)を取得できます。
self::getConstants('TEST_',__CLASS__); //inside same class
ActiveRecord::getConstants('TEST_','ActiveRecord'); //outside, somewhere else in view or controller
ドロップダウンの場合、次のようになります(MyModelに親ActiveRecordがある場合)
echo CHtml::dropDownList('name','selected',
MyModel::getConstants('TEST_','MyModel'),
array(// for htmlOptions
)
);
新しい定数を追加すると、コード内のすべての場所を編集するのを忘れることができます。すべてのドロップダウンなどに自動的に追加されます。
シンプルで、使用するだけです:
$this::TEST1;
ドロップダウン リストで:
echo CHtml::dropDownList('name','selected',
array($this::TEST1=>'Test1',$this::TEST2=>'Test2',$this::TEST3=>'Test3'),
array(// for htmlOptions
)
);