我在控制器中有三个const:
const TEST1 = 1;
const TEST2 = 2;
const TEST3 = 3;
如何在视图中将这些值称为dropDown?
答案 0 :(得分:2)
如果你对不同模型中的所有常量都很混乱,你可以使用我编写的代码片段来管理它们。请参阅Managing constants easily(yii wiki文章)
我将仅复制函数和一个示例,但是对于完整的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;
}
}
之后,您可以使用此方法从数组中获取特定常量(来自一个组):
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
)
);
现在,如果添加新常量,您将忘记编辑代码中的所有位置。它将自动添加到您的所有下拉列表中。
答案 1 :(得分:1)
简单,只需使用:
$this::TEST1;
在dropdownList中:
echo CHtml::dropDownList('name','selected',
array($this::TEST1=>'Test1',$this::TEST2=>'Test2',$this::TEST3=>'Test3'),
array(// for htmlOptions
)
);