【问题标题】:How to make the Yii-CActiveForm not set a list item to selected?如何使 Yii-CActiveForm 不将列表项设置为选中?
【发布时间】:2015-07-24 19:37:13
【问题描述】:

在 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 表中,列expert_idNULL)。但是在有专家的用户页面上,用户的专家条目会得到selected

如何允许CActiveForm对象选择一个antry并显示一个没有preselected值的表单而不考虑表/对象关系?

【问题讨论】:

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


    【解决方案1】:

    您可以在加载后将属性 $model->expert 填充为 null。

    // 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>
    

    【讨论】:

    • 感谢您的回答!这是一个可行的解决方案,+1,但实际上它只是一种解决方法。我认为,“破坏”一个对象并不是一个真正干净的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2011-06-18
    相关资源
    最近更新 更多