如何使Yii-CActiveForm没有设置列表项?

时间:2015-07-24 19:37:14

标签: drop-down-menu yii default-value yii-cactiverecord

在Yii应用程序中,我有模型UserExpert'expert'=>array(self::BELONGS_TO, 'Expert', 'expert_id'),)。

有一个用于创建/编辑用户数据的表单。现在我想用下拉列表扩展它:

<?php
/**
 * @var $experts Expert[]
 */ 
$expertsDropDownListData = array();
foreach ($experts as $expert) {
    $expertsDropDownListData[$expert->id] = $expert->name;
}
?>
<div class="row">
    <?php
    echo $form->labelEx($user, '', array('label' => Yii::t('app', 'Some text...')));
    ?>
    <?php
    echo $form->dropDownList(
        $user, 'expert[id]', $expertsDropDownListData,
        array(
            'empty' => Yii::t('app', 'Please select an expert.'),
            // 'options' => array('' => array('selected' => 'selected')),
            // 'prompt'=>'Choose One',
        )
    );
    ?>
    <?php echo $form->error($user, 'expert[id]'); ?>
</div>

我希望下拉列表永远不会有专家条目作为默认条目。在页面加载时,应该“选择”空值。它适用于没有相关专家的用户页面(在users表中,columnt expert_idNULL)。但是在拥有专家的用户页面上,用户的专家条目获得selected

如何允许CActiveForm对象选择antry并显示没有selected值的表单,而不管表/对象关系如何?

1 个答案:

答案 0 :(得分:1)

您可以在加载后使用null填充属性$ model-&gt; expert。

// Controller
$user = User::model()->findByPk(1);
...your awesome code here...

// never show a default value
$user->expert=null;

if(isset($_POST)) {
  // $user->expert will be set here with data from view
  $user->attributes = $_POST;
}

...

// View
    <div class="row">
    <?php
    echo $form->labelEx($user, '', array('label' => Yii::t('app', 'Some text...')));
    ?>
    <?php
    echo $form->dropDownList(
        $user, 'expert', CHtml::listData($experts,'id', 'name'),
        array('empty' => Yii::t('app', 'Please select an expert.'),)
    );
    ?>
    <?php echo $form->error($user, 'expert'); ?>
    </div>